同時迭代多個序列

2021-08-20 15:09:56 字數 1959 閱讀 3270

你想同時迭代多個序列,每次分別從乙個序列中取乙個元素。

為了同時迭代多個序列,使用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 ...