Python同時迭代多個序列的方法
阿新 • • 發佈:2020-07-28
問題
你想同時迭代多個序列,每次分別從一個序列中取一個元素。
解決方案
為了同時迭代多個序列,使用 zip() 函式。比如:
>>> xpts = [1,5,4,2,10,7] >>> ypts = [101,78,37,15,62,99] >>> for x,y in zip(xpts,ypts): ... print(x,y) ... 1 101 5 78 4 37 2 15 10 62 7 99 >>>
zip(a,b) 會生成一個可返回元組 (x,y) 的迭代器,其中x來自a,y來自b。一旦其中某個序列到底結尾,迭代宣告結束。因此迭代長度跟引數中最短序列長度一致。
>>> a = [1,3] >>> b = ['w','x','y','z'] >>> for i in zip(a,b): ... print(i) ... (1,'w') (2,'x') (3,'y') >>>
如果這個不是你想要的效果,那麼還可以使用 itertools.zip_longest() 函式來代替。比如:
>>> from itertools import zip_longest >>> for i in zip_longest(a,'y') (None,'z')
>>> for i in zip_longest(a,b,fillvalue=0): ... print(i) ... (1,'y') (0,'z') >>>
討論
當你想成對處理資料的時候 zip() 函式是很有用的。比如,假設你頭列表和一個值列表,就像下面這樣:
headers = ['name','shares','price'] values = ['ACME',100,490.1]
使用zip()可以讓你將它們打包並生成一個字典:
s = dict(zip(headers,values))
或者你也可以像下面這樣產生輸出:
for name,val in zip(headers,values): print(name,'=',val)
雖然不常見,但是 zip() 可以接受多於兩個的序列的引數。這時候所生成的結果元組中元素個數跟輸入序列個數一樣。比如;
>>> a = [1,3] >>> b = [10,11,12] >>> c = ['x',c): ... print(i) ... (1,'x') (2,'y') (3,12,'z') >>>
最後強調一點就是,zip() 會建立一個迭代器來作為結果返回。如果你需要將結對的值儲存在列表中,要使用 list() 函式。比如:
>>> zip(a,b) <zip object at 0x1007001b8> >>> list(zip(a,b)) [(1,10),(2,11),(3,12)] >>>
以上就是Python同時迭代多個序列的方法的詳細內容,更多關於Python同時迭代多個序列的資料請關注我們其它相關文章!