歡迎關注公眾號:python資料科學家
【要點搶先看】
1.range函式:返回一系列連續增加的整數
2.zip函式:並行迭代多個序列
3.enumerate函式:同時產生偏移和元素
今天我們來講講三種迴圈迭代的常用技巧,range、zip和enumerate
內建函式range:用來返回一系列連續增加的整數
這個函式產生的連續增加的整數序列,可以作為for迴圈迭代的索引
for x in range(5):
print(x, end=`,`)
0,1,2,3,4,
複製程式碼
range也可以用在任何需要整數列表的地方。直接列印range函式的返回值是不能直接返回一個整數列表的,如果將其作為一個引數傳給list函式,則可以一次性顯示全部結果。
print(range(5))
range(0, 5)
複製程式碼
–
print(list(range(-5,5)))
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
複製程式碼
內建函式range在for迴圈中是最常用的,它提供了一種簡單的方法,重複特定次數的動作。
當然還可以做一些定製工作,比如在遍歷的過程中跳過一些元素。例如每隔一個元素對字串進行遍歷:
S = `abcdefghijklmn`
for i in range(0,len(S),2):
print(S[i], end=`,`)
a,c,e,g,i,k,m,
複製程式碼
當然,這只是一個示例,我們之前提到過的分片表示式才是實現該功能的最簡單的方法,這個我們之前是介紹過的:
S = `abcdefghijklmn`
for c in S[::2]:
print(c, end=`,`)
a,c,e,g,i,k,m,
複製程式碼
和檔案迭代一樣,這裡range函式的優點也是明顯的,它沒有複製字串,不會在python中再建立一個字串列表,這對於很大的字串來說,會節約不少空間。
zip:用來並行迭代多個序列
內建zip函式允許我們使用for迴圈來並行迭代多個序列。zip使用多個序列作為引數,然後返回元組的列表,將這些序列中的並排元素一一配對。
L1 = [1,2,3,4,5]
L2 = [`A`,`B`,`C`,`D`,`E`]
for t in zip(L1,L2):
print(t, end=`,`)
(1, `A`),(2, `B`),(3, `C`),(4, `D`),(5, `E`),
複製程式碼
和range一樣,zip在遍歷時也是依次按需產生結果,而不是一次性顯示所有結果
L1 = [1,2,3,4,5]
L2 = [`A`,`B`,`C`,`D`,`E`]
print(zip(L1,L2))
<zip object at 0x000000000260ED08>
複製程式碼
同樣的,如果想一次性顯示所有結果,則必須將其包含在一個list呼叫中,以便一次性顯示所有結果
L1 = [1,2,3,4,5]
L2 = [`A`,`B`,`C`,`D`,`E`]
print(list(zip(L1,L2)))
[(1, `A`), (2, `B`), (3, `C`), (4, `D`), (5, `E`)]
複製程式碼
最後只說明一點,當zip的多個引數長度不同時,zip會以最短序列的長度為準來截斷所得到的元組
L1 = [1,2,3,4,5]
L2 = [`A`,`B`,`C`]
print(list(zip(L1,L2)))
[(1, `A`), (2, `B`), (3, `C`)]
複製程式碼
回顧一下,之前我們談到過,當字典的鍵和值必須在執行時計算產生時,zip函式可以用於產生這樣的字典
keys = [`A`, `B`, `C`]
vals = [1, 2, 3]
D = dict(zip(keys,vals))
print(D)
{`C`: 3, `A`: 1, `B`: 2}
複製程式碼
enumerate:用來同時產生偏移和元素
有時我們在遍歷的時候,既需要偏移值,又需要對應元素,那麼內建函式enumerate就可以實現這個功能。
他在for迴圈的條件下每輪迭代返回一個包含偏移值和偏移元素的元組:(index,value)
S = `spam`
for t in enumerate(S):
print(t,end=` `)
(0, `s`) (1, `p`) (2, `a`) (3, `m`)
複製程式碼
同樣,他也是按需產生,而非一次性產生所有元素的列表
S = `spam`
print(enumerate(S))
<enumerate object at 0x0000000001ED2558>
複製程式碼
【妹子說】這種高階技巧課程的內容還是挺多的,需要多多練習才能好好掌握~
公眾號二維碼:python資料科學家: