说我有两个列表:的Python:生产列表,它是两个列表的总和,项目明智
a=[1,2,3,4,5]
b=[5,4,3,2,1]
我想创建一个第三个,这将是给定的两个线性总和:
c[i]==a[i]+b[i]
c==[6,6,6,6,6]
是否可以使用'for'构造函数?像:
c = [aa+bb for aa in a for bb in b]
(这显然返回不是我想要的)
说我有两个列表:的Python:生产列表,它是两个列表的总和,项目明智
a=[1,2,3,4,5]
b=[5,4,3,2,1]
我想创建一个第三个,这将是给定的两个线性总和:
c[i]==a[i]+b[i]
c==[6,6,6,6,6]
是否可以使用'for'构造函数?像:
c = [aa+bb for aa in a for bb in b]
(这显然返回不是我想要的)
使用zip()
:
>>> a = [1,2,3,4,5]
>>> b = [5,4,3,2,1]
>>> c = [x+y for x,y in zip(a, b)]
>>> c
[6, 6, 6, 6, 6]
或:
>>> c = [a[i] + b[i] for i in range(len(a))]
>>> c
[6, 6, 6, 6, 6]
c = [aa+bb for aa in a for bb in b]
是一样的东西:
for aa in a:
for bb in b:
aa+bb
这意味着,从a
1
,然后遍历的b
所有元素,同时将其添加到1
,然后选择从a
2
,然后再通过b
所有值循环而将它们添加到2
,这就是为什么你没有得到预期的产出。
我不知道你在做什么,但你可以很容易地做你所要求的numpy。我只是不确定你是否真的想将额外的依赖添加到你的代码中。
sums = [a[i]+b[i] for i in range(len(a))]
感谢 - 点...不知道为什么这正是他要求的... – 2012-07-09 20:59:25
这是不正确的。 'range()'接受一个整数,而不是一个列表:http://ideone.com/bnDMC。您应该使用len(a)。 – C0deH4cker 2012-07-09 21:00:34
哦,是的,你的权利...打字速度太快...固定...(但它也包括以下在Ashwini乔德里的职位) – 2012-07-09 21:00:56
[ay + be for ay, be in zip(a, b)]
a=[1,2,3,4,5]
b=[5,4,3,2,1]
[x+y for x,y in zip(a,b)]
[6, 6, 6, 6, 6]
OR
map(lambda x,y:x+y, a, b)
[6, 6, 6, 6, 6]
“map()”为+1。 – 2012-07-09 21:16:48
对于具有多个序列的'map()'+1,这隐含地做了一个'izip_longest'。 – PaulMcG 2012-07-09 22:11:05
这不是很明显我分配给'C'的结果会是什么,所以我试图在IDLE和C'的'用于说明目的的价值粘贴。 – 2012-07-09 22:12:12