給妹子講python-S01E13掌握迴圈迭代的高階技巧

醬油哥在掘金發表於2019-01-16

歡迎關注公眾號: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(05)
複製程式碼

print(list(range(-5,5)))

[-5-4-3-2-101234]
複製程式碼

內建函式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 = [123]
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資料科學家:

給妹子講python-S01E13掌握迴圈迭代的高階技巧

相關文章