Python知識點3——列表操作

for循環

1.for循環遍歷列表

chars=['q','w','e','r','t']
for char in chars:
	print(char)

這三行代碼中,for循環會依次讀取列表中的元素,並存儲到循環變量char中,最後打印

 

注意點

1.循環變量名稱最好和列表名稱呈現單複數關係,比如char 和 chars、cat和cats等,便於識別(只是個命名規範)

2.循環語句最後的那個冒號(:)不能省

 

2.range()函數

for num in range(0,6):
	print(num)

range()函數的打印範圍是左閉右開(從第一個數開始打印,打印到第二個數時停止,不包括第二個數)

 

3.用list()和range()函數創建數字型列表

nls=list(range(0,10))
for nl in nls:
	print(nl)
 print(nls)

 

range()函數還可以指定步長,比如,打印0-10中的所有偶數

print(list(range(0,12,2)))

range(0,12,2)從0開始,然後不斷+2,直到大於等於12爲止,同樣左閉右開

 

生成偶數平方的列表,同時打印最值和列表總和

squares=[]
for square in range(0,11,2):
	squares.append(square**2)
print(squares, min(squares), max(squares), sum(squares))

上述代碼用了三行生成了一個列表,如果用列表解析式的話,只需要一行

squares1=[value**2 for value in range(0,11,2)]
print(squares1)

for value in range(0,11,2)將循環變量提供給value**2, 從而生成squares1

 

切片

切片就是列表元素中的一部分

print(squares1[:]])#打印出所有列表元素
print(squares1[0:3])#打印出索引爲0,1,2的三個元素,不包括3
print(squares1[1:4])#打印出索引爲1,2,3的三個元素,不包括4
print(squares1[:4])#從頭打印出列表元素,不包括索引4
print(squares1[2:])#從索引2的元素打印到最後
print(squares1[-3:])#從倒數第三個元素打印到最後
print(squares1[:-2])#從頭打印到倒數第三個元素,不包括倒數第2個元素

print(squares1[0:3:2])#從零不斷+2打印元素,直到大於等於三爲止(不包括索引爲3的元素)
print(squares1[1:4:2])
print(squares1[:4:2])#從零不斷+2打印元素,直到大於等於4爲止(不包括索引爲4的元素)
print(squares1[2::2])#從2不斷+2打印元素,如果最後一個元素不被跳過,打印,否則不打印
print(squares1[-3::2])#從倒數第三個元素不斷+2打印元素,如果最後一個元素不被跳過,打印,否則不打印
print(squares1[:-2:2])#從零不斷+2打印元素,直到大於等於倒數第二個元素的索引爲止(不包括倒數第二個的元素)

其實通過實驗可以發現,切片的性質和range函數非常類似,都是左閉右開(如果冒號兩邊都有數字,不包含冒號右邊索引所代表的元素)

添加步長之後,性質也和range是一樣的,不斷+步長,直到大於等於冒號右邊的索引爲止(不包括索引所表示的元素)

 

遍歷切片

切片雖然是列表的一部分,但是也是列表,所以就能遍歷,也能用列表解析式生成新的列表

for square in squares[1::2]:
	print(square)

 

newlist=[square**2 for square in squares[1::2]]
print(newlist)

 

列表的複製

列表的複製有兩種方式,第一種是使用切片賦值,第二種是使用列表名稱賦值,兩種方式的區別在哪?

newlist1=newlist[:]
newlist2=newlist;
print(newlist, newlist1, newlist2);

從上面的結果上來看,我們看不出任何卻別,但是,當我們修改newlist或newlist2中的元素時,情況發生了變化

newlist1=newlist[:]
newlist2=newlist;
print(newlist, newlist1, newlist2);
newlist[0]=2
print(newlist, newlist1, newlist2);
newlist2[0]=39
print(newlist, newlist1, newlist2);

此時,無論修改newlist2和newlist中的哪一個,newlist2和newlist都同時發生了變化,而newlist1沒有任何變化

所以

當使用原來列表的切片來將整個列表複製到一個新的列表的時,新的列表是原來列表的副本,新的列表和原來列表值雖然相同,但是是兩個不同的列表,不同的變量

但是,當使用列表名來複制整個列表到一個新的列表時,兩個列表名都指向同一個列表,所以,當修改其中一個的列表時,另一個列表也跟着被修改

 

元組

元組和列表只有兩點不同:

1,元組使用的是小括號()括起來,而列表使用的是中括號[]。

2,元組中的元素不能被修改,列表可以。

ts=(1,2,3,4,5)
print(ts)
ts[2]=10

當修改元組中的元素時,會報錯

 

雖然元組中的元素不能被修改,但是元組可以被整體修改(重新賦值)

ts=(1,2,3,4,5)
print(ts)
ts=(10,20)
print(ts)

ts變量被重新賦值成其他元組

 

參考書籍:《Python編程從入門到實踐》

歡迎大家評論交流,作者水平有限,如有錯誤,歡迎指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章