1.同時迭代多個序列(zip(函數)) 使用zip()函數可以同時迭代多個序列。 zip(a, b)的作用是創建一個迭代器,產生元組(x, y),x取自a序列,y取自b序列,當a,b序列中其中一個沒有元素可以繼續迭代時,整個迭代過程結束。 如果想對多餘的序列進行迭代,即上面a中的4,5,6元素,可以 ...
1.同時迭代多個序列(zip(函數))
使用zip()函數可以同時迭代多個序列。
>>> X = [1, 2, 3, 4, 5, 6] >>> Y = [121, 223, 116, 666, 919, 2333] >>> for x, y in zip(X, Y): ... print(x, y) ... 1 121 2 223 3 116 4 666 5 919 6 2333
zip(a, b)的作用是創建一個迭代器,產生元組(x, y),x取自a序列,y取自b序列,當a,b序列中其中一個沒有元素可以繼續迭代時,整個迭代過程結束。
>>> a = [1, 2, 3, 4, 5, 6] >>> b = ['x', 'y', 'z'] >>> for x, y in zip(a, b): ... print(x, y) ... 1 x 2 y 3 z >>>
如果想對多餘的序列進行迭代,即上面a中的4,5,6元素,可以使用 itertools.zip_longest() 。
>>> a = [1, 2, 3, 4, 5, 6] >>> b = ['x', 'y', 'z'] >>> from itertools import zip_longest >>> for i in zip_longest(a, b): ... print(i) ... (1, 'x') (2, 'y') (3, 'z') (4, None) # 多餘元素對應None (5, None) (6, None) >>> for i in zip_longest(a, b, fillvalue=2): # 可以指定多餘元素對應的值 ... print(i) ... (1, 'x') (2, 'y') (3, 'z') (4, 2) # 指定多餘元素對應值為2 (5, 2) (6, 2)
zip()函數也可以接受多餘2個的序列,和2個序列的使用情況一樣。
2.在不同的容器中進行迭代
使用itertools.chain()方法可以用來迭代不同容器中的對象。chain比先合併 a,b 序列再迭代更高效,更優雅,更pythonic。
>>> from itertools import chain >>> a = [1, 2, 3, 4, 5] >>> b = ['x', 'y', 'z'] >>> for i in chain(a, b): ... print(i) ... 1 2 3 4 5 x y z
3.合併多個有序序列,並對整個有序序列進行迭代
合併多個有序序列,在對整個有序序列進行迭代,可以使用模塊heapq,使用heapq.merge()函數。註意序列必須是有序的。
>>> from heapq import merge >>> a = [1, 3, 4, 5, 7, 9] >>> b = [2, 6, 8, 11, 13] >>> for i in merge(a, b): ... print(i) ... 1 2 3 4 5 6 7 8 9 11 13