Python如何使用zip函数将多个列表合并为一个列表
Python中提供了一种非常方便的函数,可以将多个列表合并为一个列表,这个函数就是zip()函数。
zip()函数可以将多个可迭代对象(如列表、元组、字符串等)中对应的元素打包成一个个元组,然后返回一个由这些元组组成的列表。
例如,假设我们有三个列表:a = [1,2,3],b = [4,5,6],c = [7,8,9],我们可以使用zip函数将它们合并为一个列表:
d = list(zip(a,b,c)) print(d) # 输出 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
在这个例子中,zip()函数将a、b、c三个列表中的第一个元素依次取出,组成一个元组(1,4,7),然后将这个元组添加到一个新的列表中。然后继续取出第二个元素,组成新的元组(2,5,8),并添加到列表中。最后取出第三个元素,组成元组(3,6,9)并添加到列表中。
需要注意的是,如果要在Python 2.x版本中使用zip()函数合并多个列表,需要在zip()函数前加上‘*’符号,如下所示:
d = zip(*[a,b,c]) print(list(d)) # 输出 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
除了合并列表外,zip()函数还可以用于多个列表的转置操作。例如,假设我们有一个二维列表:
lst = [[1,2,3],[4,5,6],[7,8,9]]
我们可以使用zip()函数进行转置操作,将其变为:
lst_t = list(zip(*lst)) print(lst_t) # 输出 [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
在这个例子中,*lst会将二维列表中的三个子列表分别传入zip()函数中,而zip()函数会将三个子列表中的第一个元素依次取出,组成一个元组(1,4,7),接着取出第二个元素,组成元组(2,5,8),最后取出第三个元素并组成元组(3,6,9)。然后将这些元组组成一个新的列表并返回。
在实际的编程应用中,zip()函数还有很多其他的用途,例如:
1. 将多个字典中相应的键值对合并为一个元组,并添加到一个新的列表中。
d1 = {'a':1,'b':2,'c':3}
d2 = {'a':4,'b':5,'c':6}
d3 = {'a':7,'b':8,'c':9}
lst = [(k,v1,v2,v3) for k,v1,v2,v3 in zip(d1.keys(),d1.values(),d2.values(),d3.values())]
print(lst) # 输出 [('a', 1, 4, 7), ('b', 2, 5, 8), ('c', 3, 6, 9)]
2. 将多个列表中的元素按照一定规律进行排列。
a = [1,2,3,4,5] b = [6,7,8,9,10] c = [11,12,13,14,15] lst = [x for y in zip(a,b,c) for x in y] print(lst) # 输出 [1, 6, 11, 2, 7, 12, 3, 8, 13, 4, 9, 14, 5, 10, 15]
从上面的例子可以看出,zip()函数是Python中非常实用的一个函数,有很多的应用场景。使用它可以让我们的代码更加简洁、高效,同时也能够提高我们的工作效率。
