背景
前段时间在知识星球上立了一个Flag,至少写10篇关于 Python,Matlab 和 C# 对比的总结。这是第 1 篇,从创建结构、添加元素、删除元素、获取元素四个角度来对比 Matlab 的向量与 Python 的列表。
1. 向量/列表 的创建
1.1 直接法
Matlab
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> disp(x);
"Monday" "Tuesday" "Wednesday" "Thursday" "Friday"
>> whos x
Name Size Bytes Class Attributes
x 1x5 398 string
>> x = [2, 3, 4, 5, 6, 7];
>> disp(x);
2 3 4 5 6 7
>> whos x
Name Size Bytes Class Attributes
x 1x6 48 double
Python
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x, type(x))
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'] <class 'list'>
x = [2, 3, 4, 5, 6, 7]
print(x, type(x))
# [2, 3, 4, 5, 6, 7] <class 'list'>
注:Matlab与Python直接创建向量/列表的方法是相同的,用[ ]
括起来,元素用,
分割。当然,Matlab中元素也可以用空格来分割。
1.2 等差数列法 – :
VS range()
Matlab
>> x = 0:9;
>> disp(x)
0 1 2 3 4 5 6 7 8 9
>> x = 1:2:9;
>> disp(x)
1 3 5 7 9
>> x = 10:-2:1;
>> disp(x)
10 8 6 4 2
Python
x = list(range(10))
print(x, type(x))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <class 'list'>
x = list(range(1, 11, 2))
print(x, type(x))
# [1, 3, 5, 7, 9] <class 'list'>
x = list(range(10, 1, -2))
print(x, type(x))
# [10, 8, 6, 4, 2] <class 'list'>
注:Matlab通过:
构造的等差数列 左右 都是闭区间,而Python通过range()
构造的等差数列是 左闭右开区间。
2. 向量/列表 的元素添加
Matlab
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x = [x,"Thursday"];
>> disp(x)
"Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Thursday"
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x(end+1) = "Thursday";
>> disp(x)
"Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Thursday"
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x = [x, ["Thursday","Sunday"]];
>> disp(x)
"Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Thursday" "Sunday"
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x = [x(1:2),"Sunday",x(3:end)];
>> disp(x)
"Monday" "Tuesday" "Sunday" "Wednesday" "Thursday" "Friday"
>> x = [123, 456];
>> y = [456, 123];
>> z = [x, y];
>> disp(z)
123 456 456 123
Python
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.append('Thursday')
print(x)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday']
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.extend(['Thursday', 'Sunday'])
print(x)
# ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Thursday', 'Sunday']
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.insert(2, 'Sunday')
print(x)
# ['Monday', 'Tuesday', 'Sunday', 'Wednesday', 'Thursday', 'Friday']
x = [123, 456]
y = [456, 123]
z = x + y # extend()
print(z)
# [123, 456, 456, 123]
注:Matlab的添加元素直接在数组中进行,而Python添加元素是通过append()
、extend()
、insert()
和运算符+
来完成。
3. 向量/列表 的元素删除
Matlab
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x(x == "Monday") = [];
>> disp(x)
"Tuesday" "Wednesday" "Thursday" "Friday"
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x(end) = [];
>> disp(x)
"Monday" "Tuesday" "Wednesday" "Thursday"
>> x(1) = [];
>> disp(x)
"Tuesday" "Wednesday" "Thursday"
>> x(end -1) = [];
>> disp(x)
"Tuesday" "Thursday"
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> x([1,2]) = [];
>> disp(x)
"Wednesday" "Thursday" "Friday"
Python
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
x.remove('Monday')
print(x) # ['Tuesday', 'Wednesday', 'Thursday', 'Friday']
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
y = x.pop()
print(y) # Friday
y = x.pop(0)
print(y) # Monday
y = x.pop(-2)
print(y) # Wednesday
print(x) # ['Tuesday', 'Thursday']
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
del x[0:2]
print(x) # ['Wednesday', 'Thursday', 'Friday']
注:Matlab通过赋值空数组的方式来删除元素,Python通过remove
、pop
和内置方法del
来删除元素。
4. 向量/列表 的元素获取
Matlab
>> x = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
>> disp(x(1)+" "+class(x(1)))
Monday string
>> disp(x(end)+" "+class(x(end)))
Friday string
>> disp(x(end - 1)+" "+class(x(end - 1)))
Thursday string
>> disp(x(1:3))
"Monday" "Tuesday" "Wednesday"
>> disp(x(1:end - 3))
"Monday" "Tuesday"
>> disp(x(2:2:end))
"Tuesday" "Thursday"
>> disp(x(1:2:end))
"Monday" "Wednesday" "Friday"
>> disp(x(end:-1:1))
"Friday" "Thursday" "Wednesday" "Tuesday" "Monday"
Python
- 通过元素的索引值,从列表获取单个元素,注意,列表索引值是从0开始的。
- 通过将索引指定为-1,可让Python返回最后一个列表元素,索引 -2 返回倒数第二个列表元素,以此类推。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x[0], type(x[0])) # Monday <class 'str'>
print(x[-1], type(x[-1])) # Friday <class 'str'>
print(x[-2], type(x[-2])) # Thursday <class 'str'>
切片的通用写法是 start : stop : step
- 情况 1 - “start :”
- 以
step
为 1 (默认) 从编号start
往列表尾部切片。
x = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(x[3:]) # ['Thursday', 'Friday']
print(x[-3:]) # ['Wednesday', 'Thursday', 'Friday']
- 情况 2 - “: stop”
- 以
step
为 1 (默认) 从列表头部往编号stop
切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[:3]) # ['Monday', 'Tuesday', 'Wednesday']
print(week[:-3]) # ['Monday', 'Tuesday']
- 情况 3 - “start : stop”
- 以
step
为 1 (默认) 从编号start
往编号stop
切片。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:3]) # ['Tuesday', 'Wednesday']
print(week[-3:-1]) # ['Wednesday', 'Thursday']
- 情况 4 - “start : stop : step”
- 以具体的
step
从编号start
往编号stop
切片。注意最后把step
设为 -1,相当于将列表反向排列。
week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']
print(week[1:4:2])
# ['Tuesday', 'Thursday']
print(week[:4:2])
# ['Monday', 'Wednesday']
print(week[1::2])
# ['Tuesday', 'Thursday']
print(week[::-1])
# ['Friday', 'Thursday', 'Wednesday', 'Tuesday', 'Monday']
注:Matlab的:
对应于Python的切片,只不过Matlab为 start:step:stop
而Python为start:stop:step
。Python相对于Matlab初始了默认值start=0
,stop=len
,step=1
。
总结
以上总结的不一定全,但先有个框架等后面在实践的过程中慢慢补充。今天就到这里吧。See You!
当前活动
我是 终身学习者“老马”,一个长期践行“结伴式学习”理念的 中年大叔。
我崇尚分享,渴望成长,于2010年创立了“LSGO软件技术团队”,并加入了国内著名的开源组织“Datawhale”,也是“Dre@mtech”、“智能机器人研究中心”和“大数据与哲学社会科学实验室”的一员。
愿我们一起学习,一起进步,相互陪伴,共同成长。
后台回复「搜搜搜」,随机获取电子资源!
欢迎关注,请扫描二维码: