1. zip()函数的定义
在Python中,zip()函数是一个非常强大的函数,可以将多个序列压缩在一起,然后返回“元组”的列表。
它的定义非常简单,格式如下:
zip(*iterables)
该函数将按照每个序列的相应元素进行联接,并返回结果“元组”列表。例如:
a = [1, 2, 3]
b = [4, 5, 6]
c = [7, 8, 9]
d = list(zip(a, b, c))
print(d)
输出结果为:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
在本例中,zip()函数将三个数组一一匹配,并返回一个包含三个元组的列表,每个元组包含来自三个序列的一个元素。
如果提供给zip()函数的序列长度不一致,则它将停止产生更多的元素。
2. zip()函数的应用
zip()的主要应用是将两个或多个序列合并在一起作为输入进行迭代,通常在for循环中使用。
2.1 迭代两个序列
在此示例中,zip()函数已用于将两个数组合并为一个单独的数组,并使用循环迭代以将其打印出来:
days = ['Monday', 'Tuesday', 'Wednesday']
fruits = ['banana', 'orange', 'peach']
for day, fruit in zip(days, fruits):
print(day + ':', fruit)
输出结果为:
Monday: banana
Tuesday: orange
Wednesday: peach
在此示例中,将days和fruits两个数组进行压缩。在每个循环迭代中,都将day变量设置为days数组中的当前元素,将fruit变量设置为fruits数组中的当前元素。这两个变量的值随着循环的每次迭代而更新。
2.2 解压缩序列
在此示例中,zip()函数已用于将三个数组合并为一个单独的数组,并使用解压缩来将其分离为三个不同的数组。
data = [('a', 1), ('b', 2), ('c', 3)]
letters, numbers = zip(*data)
print(letters)
print(numbers)
输出结果为:
('a', 'b', 'c')
(1, 2, 3)
在此示例中,可以将zip(*)用于解压缩数组。在zip()函数之前添加星号(*)表示使用可变数量的输入参数,例如:
zip(*[iterable]*n)
与
zip(iterable1, iterable2, ..., iterablen)
完全相同,其中iterable表示可迭代对象,n表示要zip的元素数量。使用星号(*)时,它将解压缩数组并提供zip()所需的每个参数。
2.3 高效的并行迭代
当数据位于不同的数据结构中时,zip()函数可以非常有效地进行并行迭代。例如,可以使用zip()在一个循环中迭代多个列表:
names = ['Steve', 'Bill', 'Jeff']
ages = [54, 66, 59]
companies = ['Apple', 'Microsoft', "Amazon"]
for name, age, company in zip(names, ages, companies):
print(name + ' (' + company + ') is ' + str(age) + ' years old.')
输出结果为:
Steve (Apple) is 54 years old.
Bill (Microsoft) is 66 years old.
Jeff (Amazon) is 59 years old.
在此示例中,将names、ages和companies列表压缩在一起,并用name、age和company变量进行迭代来输出每个人的详细信息。这可用于将数据从不同的表中提取并进行合并。