zip()
詳細介紹zip()
是 Python 的一個內建函數,用於將多個可迭代對象(如列表、元組、字符串等)的元素配對組合起來,返回一個迭代器(zip 對象)。
zip(*iterables)
*iterables
: 可以是一個或多個可迭代對象
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
zipped = zip(names, ages)
print(list(zipped)) # 輸出: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
當輸入的可迭代對象長度不同時,zip()
會以最短的為準:
names = ['Alice', 'Bob', 'Charlie', 'David']
ages = [25, 30, 35]
zipped = zip(names, ages)
print(list(zipped)) # 輸出: [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
# 'David' 被忽略,因為 ages 只有 3 個元素
可以使用 *
運算符來解壓縮 zip 對象:
zipped_data = [('Alice', 25), ('Bob', 30), ('Charlie', 35)]
names, ages = zip(*zipped_data)
print(names) # 輸出: ('Alice', 'Bob', 'Charlie')
print(ages) # 輸出: (25, 30, 35)
for
循環一起使用for name, age in zip(names, ages):
print(f"{name} is {age} years old")
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]
cities = ['New York', 'London', 'Paris']
for name, age, city in zip(names, ages, cities):
print(f"{name} is {age} years old and lives in {city}")
keys = ['name', 'age', 'city']
values = ['Alice', 25, 'New York']
person = dict(zip(keys, values))
print(person) # 輸出: {'name': 'Alice', 'age': 25, 'city': 'New York'}
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transposed = list(zip(*matrix))
print(transposed) # 輸出: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
zip()
返回的是一個迭代器,只能被消費一次。如果需要重複使用,可以轉換為列表或元組。
zipped = zip(names, ages)
first_use = list(zipped) # 第一次使用
second_use = list(zipped) # 第二次使用會得到空列表
itertools.zip_longest()
。zip()
直接返回列表而不是迭代器。如果需要迭代器行為,可以使用 itertools.izip()
。map()
的比較zip()
和 map()
都可以處理多個可迭代對象,但目的不同:
zip()
: 將多個可迭代對象的元素配對map()
: 將函數應用於可迭代對象的元素# 使用 zip
result = zip([1, 2, 3], ['a', 'b', 'c'])
# 輸出: [(1, 'a'), (2, 'b'), (3, 'c')]
# 使用 map
result = map(lambda x, y: (x, y), [1, 2, 3], ['a', 'b', 'c'])
# 輸出: [(1, 'a'), (2, 'b'), (3, 'c')]
zip()
是一個非常有用的工具,特別是在需要同時處理多個相關序列時。它簡化了代碼,提高了可讀性,並且在內存使用上非常高效,因為它返回的是迭代器而不是列表。