背景
前段時間在知識星球上立了一個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”、“智能機器人研究中心”和“大數據與哲學社會科學實驗室”的一員。
願我們一起學習,一起進步,相互陪伴,共同成長。
後臺回覆「搜搜搜」,隨機獲取電子資源!
歡迎關注,請掃描二維碼: