forzip python_Python 使用 zip 與 for 迴圈同時對多個 List 進行迭代

本文介绍了如何在Python中使用zip函数同时迭代多个列表,包括如何处理不同长度的列表,以及如何将zip结果转换回原始列表。此外,还展示了如何使用zip创建字典,并演示了Python2与Python3中zip行为的差异。最后,提到了unzip的概念,即如何将zip打包后的结果解包回原来的列表。
摘要由CSDN通过智能技术生成

這裡介紹如何在 Python 中同時對多個 list 進行迭代,在迴圈中每次各取一個 list 中的元素進行處理。

zip 與 for 迴圈

在 Python 中若要將兩個 list 以迴圈的方式一次各取一個元素出來處理,可以使用 zip 打包之後配合 for 迴圈來處理:# 第一個 List

names = ["A", "B", "C"]

# 第二個 List

values = [11, 23, 46]

# 使用 zip 同時迭代兩個 List

for x, y in zip(names, values):

print(x, y)

這裡的 zip(names, values) 會將 names 與 values 的每個元素以一對一的方式配對起來,組成一個新的迭代器,然後交給 for 迴圈進行迭代,所以每一次迭代時所取的 x 值會來自於 names,而 y 則會來自於 values,結果就會像這樣:A 11

B 23

C 46

不同長度的 Lists

zip 若遇到不同長度的 list 時,會以長度最短的 list 為準,超過長度的部分就會被捨棄:# 兩個不同長度的 List

names2 = ["A", "B", "C"]

values2 = [11, 23]

for x, y in zip(names2, values2):

print(x, y)A 11

B 23

若要以長度最長的 list 為準,可以改用 zip_longest,而長度不足的 list 則會以 None 補足:# 以長度最長的 List 為準

from itertools import zip_longest

for x,y in zip_longest(names2, values2):

print(x, y)A 11

B 23

C None

同時迭代多個 Lists

這種方式同樣適用於多個 lists 的狀況:# 多個 Lists

names = ["A", "B", "C"]

values = [11, 23, 46]

ages = [45, 67, 82]

# 使用 zip 同時迭代多個 List

for x, y, z in zip(names, values, ages):

print(x, y, z)A 11 45

B 23 67

C 46 82

建立 Dict

假設我們有兩個 lists 分別存放鍵與值的資料:# 鍵與值的資料

keys = ["tw", "us", "it"]

values = [2.1, 3.8, 6.9]

若要用這兩個 lists 建立一個 dict,可以這樣寫:# 建立 Dict

dict(zip(keys, values)){'us': 3.8, 'it': 6.9, 'tw': 2.1}

補充說明

zip 的傳回值在 Python 2 與 Python 3 中會有一些差異:names = ["A", "B", "C"]

values = [11, 23, 46]

zip(names, values)

若在 Python 2 中,zip 會傳回 tuples 組成的 list:[('A', 11), ('B', 23), ('C', 46)]

若是在 Python 3 中,則會傳回一個 tuples 的迭代器(iterator):

若在 Python 3 中也想要產生一個由 tuples 組成的 list(就像 Python 2 一樣),可以使用:list(zip(names, values))

Unzip

若要將 zip 打包過後的 list 轉回原來的兩個 lists,可以使用 zip(*zippedList) 這種寫法:# 打包成 Tuples 組成的 List

zippedList = list(zip(names, values))

# 轉回原來的兩個 Lists

n, v = zip(*zippedList)

Python 2 使用迭代器

Python 3 使用迭代器的好處就是可以更有效率的處理大量的資料,而若在 Python 2 中也想使用迭代器的話,可以改用這種方式:import itertools

# Python 2 使用迭代器

for x, y in itertools.izip(names, values):

print(x, y)

# 以最長的 list 為準

for x, y in itertools.izip_longest(names, values):

print(x, y)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值