如何在Python中並行迭代兩個列表?


在Python中,使用**for迴圈**通常可以迭代單個數據結構,例如列表,但是如果我們需要並行迭代兩個或多個列表呢? 在這篇文章中,我們將看到並行迭代兩個或多個列表的不同方法。

透過使用range()函式,我們可以並行迭代兩個列表。讓我們看看下面的例子以及我們如何在python中迭代兩個列表。

使用for迴圈(如果兩個列表的長度相同)

假設兩個列表的長度相同,我們在這裡使用len()方法來獲取列表物件的長度。

示例

l1 = ['a', 'b', 'c', 'd', 'e']
l2 = [97, 98, 99, 100, 101]
length = len(l1) # Assuming both lists have same length

for i in range(length):
    print(l1[i], l2[i])

輸出

a 97
b 98
c 99
d 100
e 101

如果兩個列表的長度不同

假設兩個列表長度不相等,我們將使用最小長度的範圍來迭代for迴圈。

示例

L1 = [1, 2, 3, 4, 5, 6, 7]
L2 = ['a', 'b', 'c']
length = len(L1) if len(L1)<=len(L2)else len(L2)

for i in range(length):
    print(L1[i], L2[i])

輸出

1 a
2 b
3 c

列表物件l1、l2的長度分別為7和3,我們將最小長度3應用於range()函式,以便我們成功地並行迭代這兩個列表。注意:如果我們使用最大長度迭代for迴圈,則會引發IndexError。

使用zip()函式

zip()函式是一個python內建函式,它返回一個zip物件,該物件表示元組的迭代器。zip()函式執行到所有可迭代物件中最小的那個。

示例

l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = ['a', 'b', 'c']

for ele_l1, ele_l2 in zip(l1, l2):
    print(ele_l1, ele_l2)

輸出

1 a
2 b
3 c

與之前的示例一樣,zip()函式也迭代了for迴圈,直到兩個輸入可迭代物件中的最小長度。

使用itertools.zip_longest()方法

zip_longest()方法將多個可迭代物件作為引數,並返回一個迭代器。此函式的工作方式與zip()函式完全相同,但它基於最長的輸入可迭代物件。

語法

zip_longest( iterable1, iterable2, fillval)

示例

不匹配的元素預設填充為None,我們可以使用fillvalue引數指定填充值。在使用zip_longest()函式之前,我們需要首先匯入itertools模組。

import itertools 

l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = ['a', 'b', 'c']

for ele_l1, ele_l2 in itertools.zip_longest(l1,l2):
    print(ele_l1, ele_l2)

輸出

1 a
2 b
3 c
4 None
5 None
6 None
7 None

示例

在這個例子中,我們成功地並行迭代了3個列表。

import itertools 

l1 = [1, 2, 3, 4, 5, 6, 7]
l2 = ['a', 'b', 'c', 'd', 'e']
l3 = [10, 11, 12, 13]

for ele_l1, ele_l2, ele_l3 in itertools.zip_longest(l1, l2, l3):
    print(ele_l1, ele_l2, ele_l3)

輸出

1 a 10
2 b 11
3 c 12
4 d 13
5 e None
6 None None
7 None None

更新於:2023年8月24日

673 次瀏覽

啟動您的職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.