一、zip()函數概述
Python內置函數zip(),可以將多個可迭代對象作為參數,返回一個迭代器。在每次循環中,zip()函數從每個可迭代對象中取出一個元素,將這些元素打包成一個元組,然後將這個元組返回。迭代器中的所有元素都以一個元組的形式返回。如果提供的可迭代對象中的任何一個已經用完,就會停止迭代。
當傳入參數長度不同時,zip()函數會根據最短的可迭代對象長度停止迭代。如果傳入多個可迭代對象中有一個為空的,zip()函數將返回一個空的迭代器
下面是一個簡單的使用示例:
list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] list3 = ['x', 'y', 'z'] z = zip(list1, list2, list3) for item in z: print(item)
輸出:
(1, 'a', 'x') (2, 'b', 'y') (3, 'c', 'z')
二、zip()函數應用場景
1. 合併多個列表或元組
zip()函數可以將多個列表或元組以及其他可迭代對象中對應位置的元素合併成一個元組。
比如,我們可以通過zip()函數將兩個列表合併為一個字典:
keys = ['name', 'age', 'gender'] values = ['Jerry', 20, 'male'] dict1 = dict(zip(keys, values)) print(dict1)
輸出:
{'name': 'Jerry', 'age': 20, 'gender': 'male'}
2. 迭代多個列表或元組
使用zip()函數可以同時迭代多個列表或元組,方便進行操作。
比如,我們可以通過zip()函數計算兩個向量的點積:
vector1 = [1, 2, 3] vector2 = [4, 5, 6] dot_product = sum([x * y for x, y in zip(vector1, vector2)]) print(dot_product)
輸出:
32
三、迭代器同步遍歷
迭代器同步遍歷指的是同時迭代多個可迭代對象,讓它們的元素在同一時間一一對應。zip()函數正是實現這一功能的好工具。
比如,我們可以通過zip()函數在同時遍歷兩個列表時,將它們的元素一一對應:
fruits = ['apple', 'banana', 'orange'] prices = [3.5, 2.8, 4.1] for fruit, price in zip(fruits, prices): print('{}: {} yuan/kg'.format(fruit, price))
輸出:
apple: 3.5 yuan/kg banana: 2.8 yuan/kg orange: 4.1 yuan/kg
在上面的示例中,zip()函數將可迭代對象fruits和prices中的第i個元素一一對應,然後在每次循環中打包成一個元組返回。我們將這個元組拆包,分別賦值給fruit和price。
四、注意事項
在使用zip()函數時,需要注意以下幾個問題:
1. 參與遍歷的可迭代對象應該具有相同的長度
如果傳入參數長度不同時,zip()函數會根據最短的可迭代對象長度停止迭代。如果不同長度的可迭代對象需要遍歷,需要自己處理好長度問題。
2. zip()函數返回一個迭代器,只能迭代一次
zip()函數返回的是一個迭代器,只能迭代一次。如果需要多次使用,需要將它轉換成列表或其他可迭代對象。
比如,我們可以通過list()函數將迭代器轉換成列表:
list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] z = zip(list1, list2) print(list(z)) print(list(z))
輸出:
[(1, 'a'), (2, 'b'), (3, 'c')] []
五、總結
Python內置函數zip()是一個強大的工具,可以在多個可迭代對象之間建立一一對應的映射關係,方便進行迭代和操作。我們可以使用zip()函數將多個列表合併為一個字典,計算向量的點積,實現迭代器同步遍歷等。在使用zip()函數時需要注意可迭代對象的長度和zip()函數返回的迭代器只能迭代一次這兩個問題。
原創文章,作者:IPAEV,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/325105.html