1

假设我有一个元组列表:

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]

4

3 回答 3

4
>>> 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功能是关键。

于 2012-09-30T18:13:47.420 回答
1

例如,您可以使用 [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)]
于 2012-09-30T18:13:41.993 回答
0

对于巨型列表,您最好使用它izipitertools因为您不需要在迭代之前创建一个新列表: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)
于 2013-12-10T08:46:57.497 回答