一、Python zip(*)函數的基本用法
Python中的zip函數可以在同時遍歷多個列表時,將對應位置的元素打包成元組。
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
list3 = [4, 5, 6]
zipped = zip(list1, list2, list3)
print(list(zipped)) # [(1, 'a', 4), (2, 'b', 5), (3, 'c', 6)]
zip函數返回一個迭代器,我們可以將其傳入list函數,將其轉換成列表類型。上述代碼將三個列表打包成了一個新的列表,其中新列表中每個元素都是原來三個列表中對應位置上的元素。
zip函數甚至可以接受空的迭代器作為參數,此時不會返回任何元素。
print(list(zip())) # []
print(list(zip([], []))) # []
二、Python zip(*)函數的高級應用
1. 解壓元組/列表
除了將多個列表打包成元組之外,zip函數還能夠將元組/列表進行「解壓」,得到原本的多個列表。
zipped = [(1, 'a', 4), (2, 'b', 5), (3, 'c', 6)]
unzipped = list(zip(*zipped))
print(unzipped) # [(1, 2, 3), ('a', 'b', 'c'), (4, 5, 6)]
在調用zip函數時,加上了*符號,這個符號用於解包zszip迭代器中的元組,實現「解壓」操作。這裡使用list函數將返回的迭代器轉化成了列表。
需要注意的是,由於unzziped變數是元組,因此我們也可以像下面這樣進行操作:
a, b, c = list(zip(*zipped))
print(a) # (1, 2, 3)
print(b) # ('a', 'b', 'c')
print(c) # (4, 5, 6)
2. 並行遍歷多個列表時的高級應用
在Python中,我們經常使用for循環來遍歷列表,如下所示:
for x in my_list:
# 處理x
...
但是,有時候我們需要同時遍歷多個列表,用上述方式會顯得很麻煩。而使用zip(*)函數,就可以很方便地實現對多個列表的並行遍歷。
假設我們有如下的幾個列表:
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
genders = ['female', 'male', 'male']
我們希望依次輸出這些元素:
Alice is a 25-year-old female.
Bob is a 30-year-old male.
Charlie is a 35-year-old male.
可以使用zip(*)函數進行並行遍歷,並使用格式化字元串來實現格式化輸出:
for name, age, gender in zip(names, ages, genders):
print(f"{name} is a {age}-year-old {gender}.")
這樣就可以依次輸出需要的結果了。
三、總結
Python中的zip(*)函數可以方便地實現多個迭代器的並行遍歷,並且可以將元組/列表進行解壓,也可以將多個列表打包成一個新的列表。使用zip(*)函數可以簡化代碼,並且在並行遍歷多個迭代器時特別有用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/157735.html