python 同時遍歷 python中的並行遍歷

2021-10-11 02:02:18 字數 1491 閱讀 6450

其實並行遍歷是啥意思?就是將二維陣列中的值同時取出來:

例如有乙個二維陣列[[1,2,3],[4,5,6]],我想成對取出來,其中的元素,結果就是

1,4;2,5;3,6;這種模式就需要下面的並行遍歷方法。

1、並行遍歷:zip和map

內建的zip函式可以讓我們使用for迴圈來並行使用多個序列。在基本運算中,zip會取得乙個或多個序列為引數,然後返回元組的列表,將這些序列中的併排的元素配成對。

示例一:

l1 = [1,2,3,4]

l2 = [5,6,7,8]

要合併這些列表中的元素,可以使用zip來建立乙個元組對的列表。與range一樣,zip是乙個可迭代物件,因此,必須將其包含在乙個list呼叫中一邊一次性顯示所有結果。

zip(l1,l2)

list(zip(l1,l2)) !注釋掉這一行,執行結果依然如次

for (x,y) in zip(l1,l2):

print(x,'+',y,'=',x + y)

執行結果為:

1 + 5 = 6

2 + 6 = 8

3 + 7 = 10

4 + 8 = 12

示例二:

l1 = [1,2,3,4]

l2 = [5,6,7,8]

l3 = [9,10,11,12]

zip(l1,l2,l3)

list(zip(l1,l2,l3))

for (x,y,z) in zip(l1,l2,l3):

print(x,'+',y,'+',z,'=',x + y + z)

結果為:

1 + 5 + 9 = 15

2 + 6 + 10 = 18

3 + 7 + 11 = 21

4 + 8 + 12 = 24

嚴格來講,zip比這個例子更一般化。可以有接受任何型別的序列(就是任何可迭代的物件,包括檔案),可以有兩個以上的引數。當引數長度不同時,zip會以最短序列的長度為準來截斷所得到的的元組。

在python 2.x中,相關的內建map函式,用類似方式把序列的元素配對起來,但是如果引數長度不同,則會為較短的序列用none補齊。而python3不再支援該函式。一般來講,map會帶乙個函式,以及乙個或多個的序列引數,然後用從序列中取出的並行元素呼叫函式的結果收集起來。

使用zip構造字典,非常方便。

示例:keys = ['spam','eggs','toast']

vals = [1,3,5]

list(zip(keys,vals))

d2 = {}

for (k,v) in zip(keys,vals):

d2[k] = v

print(d2)

執行結果為:

在python2.2和後續版本中,可以完全跳過for迴圈,直接把zip過的健/值列表傳給內建的dict建構函式,以上劃線部分可以換做d3 = dict(zip(keys,vals))。

內建變數名dict其實是python中的型別名稱。

Python 同時遍歷兩個列表

list1 name age job list2 jim 35,test coder for i,j in zip list1,list2 print i,j name jim age 35 job test coderzip 函式用於將可迭代的物件作為引數,將物件中對應的元素打包成乙個個元組,然後...

python同時遍歷兩個list

用迭代器迭代的方法也不是不可以,python提供了更直觀的方法 可以使用zip把兩個list打包 類似 list1 1,2,3,4 list2 5,6,7,8 for i1,i2 in zip list1,list2 i3 i1 i2 print i3 用迭代器迭代的方法也不是不可以,python提...

Python在遍歷列表的同時移除元素

之前遇到的問題 找到了這個解決辦法 錯誤的做法1 n 1,2,3,4,5,6,7,8,9,10 for x in n n.remove x print n 執行結果 2,4,6,8,10 原因很簡單,for會去獲取列表的迭代器,每次迴圈時按次序獲取內容,這次取n下次迴圈就取n 1,但是迴圈體中對列表...