一、zip(*)函數概述
zip()函數是Python內置函數之一,他可以將多個可迭代對象的元素按照順序「壓縮」成一個元組,再把這些元組組成列表返回。而zip(*)函數則是zip()的拓展,在zip()函數的基礎上,將元組解壓縮成多個可迭代對象。
二、zip(*)函數的應用場景
1. 並行迭代
zip()函數最常見的應用場景就是並行迭代。通過zip()函數,我們可以將多個可迭代對象的元素一一對應,依次進行迭代。
list1 = [1, 2, 3]
list2 = ['a', 'b', 'c']
for i, j in zip(list1, list2):
print(i, j)
上述代碼運行後,會輸出:
1 a
2 b
3 c
代碼中,我們定義了兩個列表,一個包含整數,一個包含字元串。在for循環中,對zip()函數進行了調用,並用兩個變數i,j分別代表zip()函數的返回值元組中的第一個元素和第二個元素,即第一個可迭代對象的元素和第二個可迭代對象的元素。
2. 交換字典的鍵和值
Python中,字典是一種非常常用的數據類型。有時候我們需要對字典進行鍵和值的交換。這個操作是非常簡單的,使用zip()函數和字典推導式即可。
dict1 = {'a':1, 'b':2, 'c':3}
dict2 = {value:key for key, value in zip(dict1.keys(), dict1.values())}
print(dict2)
上述代碼運行後,會輸出:
{1: 'a', 2: 'b', 3: 'c'}
代碼中,我們首先定義了一個字典dict1,然後使用zip()函數分別將它的key和value壓縮到兩個元組中,然後反轉順序,變成了value和key。最後,我們使用字典推導式創建了一個新的字典dict2。
三、zip(*)函數的實現方法
1. zip函數的實現方法
要實現zip()函數,我們可以使用Python的迭代器和yield語句。下面是zip()函數的具體實現:
def my_zip(*args):
iters = [iter(i) for i in args]
while True:
try:
yield tuple([next(i) for i in iters])
except StopIteration:
return
代碼中,我們首先創建一個iters列表,其中包含了所有的可迭代對象的迭代器。然後,我們通過一個while循環和try…except語句不斷取出可迭代對象的元素,直到所有的元素都被取完。
2. zip(*)函數的實現方法
zip(*)函數的實現方法與zip()函數非常類似,只需要在zip()函數的基礎上進行一些拓展即可。
def my_zip(*args):
args = [list(i) for i in args]
length = len(min(args))
for i in range(length):
yield tuple([arg[i] for arg in args])
代碼中,我們首先將所有的可迭代對象轉化為列表類型,並取得列表中最小長度。然後,我們用一個for循環和列表推導式取出所有元素的第i個,並將他們組成元組,返回值即為zip(*)函數的返回值。
四、總結
zip(*)函數是Python中非常常用的一個函數,它可以很好的解決多個可迭代對象的並行迭代問題,也可以用於字典鍵值交換等操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/154985.html