你想同時迭代多個序列,每次分別從乙個序列中取乙個元素。
為了同時迭代多個序列,使用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
1015784
3721510627
99>>>
zip(a, b)
會生成乙個可返回元組(x, y)
的迭代器,其中x來自a,y來自b。 一旦其中某個序列到底結尾,迭代宣告結束。 因此迭代長度跟引數中最短序列長度一致。
>>> a = [1, 2, 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,b):
... print(i)
...(1, 'w')
(2, 'x')
(3, 'y')
(none, 'z')
>>> for i in zip_longest(a, b, fillvalue=0):
... print(i)
...(1, 'w')
(2, 'x')
(3, '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, 2, 3]
>>> b = [10, 11, 12]
>>> c = ['x','y','z']
>>> for i in zip(a, b, c):
... print(i)
...(1, 10, 'x')
(2, 11, 'y')
(3, 12, 'z')
>>>
最後強調一點就是,zip()
會建立乙個迭代器來作為結果返回。 如果你需要將結對的值儲存在列表中,要使用list()
函式。比如:
>>> zip(a, b)
object at 0x1007001b8>
>>> list(zip(a, b))
[(1, 10), (2, 11), (3, 12)]
>>>
python zip 同時迭代多個序列
zip 可以平行地遍歷多個迭代器 python 3中zip相當於生成器,遍歷過程中產生元祖,python2會把元祖生成好,一次性返回整份列表 zip x,y,z 會生成乙個可返回元組 x,y,z 的迭代器 x 1,2,3,4,5 y a b c d e z a1 b2 c3 d4 e5 for i ...
zip 同時迭代多個序列
1 可以使用zip 函式來同時迭代多個序列 xpts 1,5,4,2,8,10 ypts 100,121,78,37,23 for x,y in zip xpts,ypts print x,y 1 100 5 121 4 78 2 37 8 23zip a,b 的工作原理是建立出乙個迭代器,該迭代器...
python使用 zip 同時迭代多個序列示例
zip 可以平行地遍歷多個迭代器 python 3中zip相當於生成器,遍歷過程中產生元祖,python2會把元祖生成好,一次性返回整份列表 zip x,y,z 會生成乙個可返回元組 x,y,z 的迭代器 x 1,2,3,4,5 y a b c d e z a1 b2 c3 d4 e5 for i ...