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編程從入門到實踐》
歡迎大家評論交流,作者水平有限,如有錯誤,歡迎指出