假设我有一个元组列表:
a = [(1, 2), (3, 4), (4, 5)]
和另一个列表,没有元组:
b = [1, 2, 3]
我将如何使用列表推导将每个元组的第一个值乘以a
每个相应的值b
?也就是说,[a[0][0] * b[0], a[1][0] * b[1], a[2][0] * b[2]]
(应该等于[1, 6, 12]
)
假设我有一个元组列表:
a = [(1, 2), (3, 4), (4, 5)]
和另一个列表,没有元组:
b = [1, 2, 3]
我将如何使用列表推导将每个元组的第一个值乘以a
每个相应的值b
?也就是说,[a[0][0] * b[0], a[1][0] * b[1], a[2][0] * b[2]]
(应该等于[1, 6, 12]
)
>>> a = [(1, 2), (3, 4), (4, 5)]
... b = [1, 2, 3]
>>> [x[0]*y for x, y in zip(a, b)]
[1, 6, 12]
zip
功能是关键。
例如,您可以使用
[a[0]*b for a,b in zip(a,b)]
该zip
函数创建一个元组列表。该列表与 的最短参数列表一样长zip
,并且i
每个元组的第 th 个元素来自 的i
第 th 个参数zip
。
>>> c = [1, 2, 3]
>>> d = [4, 5, 6]
>>> zip(c,d)
[(1, 4), (2, 5), (3, 6)]
对于巨型列表,您最好使用它izip
,itertools
因为您不需要在迭代之前创建一个新列表:http: //pymotw.com/2/itertools/#production-new-values。这种方法的一个巨大优势是您不受序列的限制。您也可以使用生成器。
import itertools as it
a = [1,2,3,4,5]
b = [6,7,8,9,10]
for e in it.izip(a,b):
print e
这将打印元组:
(1, 6)
(2, 7)
(3, 8)
(4, 9)
(5, 10)