python zip()方法返回一个zip对象,一个图元的迭代器,其中每个传递的迭代器中的第一个元素被配对在一起。然后每个给定的迭代器中的第二个元素被配对在一起,第三个元素,等等。
Python 列表的 zip 列表
要创建一个Python zip 列表的列表,定义三个具有相同元素数量的不同列表,并将这些列表传递给 zip() 方法,该方法将返回元组迭代器,然后使用list()方法将其转换成列表:
# app.py
stocks = ['reliance', 'infosys', 'tcs']
prices = [2175, 1127, 2750]
sectors = ['Oil and Telecom', 'IT', 'IT']
zipped = zip(stocks, prices, sectors)
print(list(zipped))
输出
[('reliance', 2175, 'Oil and Telecom'), ('infosys', 1127, 'IT'), ('tcs', 2750, 'IT')]
你可以看到,它与每个列表的第一项配对,然后是第二和第三项。我们可以使用 zip() 方法将列表合并。
解除参数的包装
当参数已经在一个列表或元组中,但必须为一个需要单独位置参数的函数调用解包时,就会出现相反的情况。
例如,内置的range()函数希望有单独的start和stop参数。如果它们不能单独使用,就用***-操作符**编写函数调用,将参数从一个列表或元组中解压:
# app.py
rdata = list(range(2, 8))
print(rdata)
args = [2, 8]
op = list(range(*args))
print(op)
输出
[2, 3, 4, 5, 6, 7]
[2, 3, 4, 5, 6, 7]
还有一个例子是在一个列表中压缩列表:
# app.py
x = [1, 2]
y = [11, 22]
z = [111, 222]
op = zip(*[x, y, z])
print(list(op))
输出
[(1, 11, 111), (2, 22, 222)]
压缩两个列表的列表
到目前为止,我们已经压缩了列表的列表。现在,我们将对两个列表的列表进行压缩。标准的 zip() 方法使我们有能力聚合容器中的值。
但是有时候,我们有一个用例,我们需要有多个列表,并且包含列表作为索引元素,我们需要将它们合并/压缩在一起。这是很不常见的情况,但解决方案仍然可以很简单。
要在 Python 中压缩两个列表,可以使用itertools.chain() + zip()方法的组合:
# app.py
import itertools
listA = [[2, 4], [6, 8], [10, 12]]
listB = [[1, 3], [5, 7], [9, 11]]
op = [list(itertools.chain(*i))
for i in zip(listA, listB)]
print(list(op))
输出
[[2, 4, 1, 3], [6, 8, 5, 7], [10, 12, 9, 11]]
这个itertools.chain()和zip()函数的组合可以完成这个特殊的工作。chain()函数可以进行列表间的聚合,而最终的聚合是由zip()方法完成的。
这就是Python zip list of lists的例子。