Python按特定顺序在列表中添加整数

Python按特定顺序在列表中添加整数,python,list,sum,Python,List,Sum,我试图创建一个代码块,在其中我可以将两个包含整数的列表添加到一起。也就是说,如果列表a=[1,2,3]和列表b=[4,5,6],那么我想分配一个添加(a[0]+b[0],a[1]+b[1],a[2]+b[2]),这样c=[5,7,9] 这是我的尝试,但c仍然是一个空列表: a = [1, 2, 3] b = [4, 5, 6] c = [] for i in a: for j in b: if i == j: d = a[i]+b[j]

我试图创建一个代码块,在其中我可以将两个包含整数的列表添加到一起。也就是说,如果列表a=[1,2,3]和列表b=[4,5,6],那么我想分配一个添加
(a[0]+b[0],a[1]+b[1],a[2]+b[2])
,这样
c=[5,7,9]

这是我的尝试,但c仍然是一个空列表:

a = [1, 2, 3]
b = [4, 5, 6]
c = []
for i in a:
    for j in b:
        if i == j:
            d = a[i]+b[j]
            e = c.append(d)
我应该更改什么?

zip()
将实现以下功能:

a = [1, 2, 3]
b = [4, 5, 6]
c = []

for x, y in zip(a, b):
   c.append(x + y)
[5,7,9]

迭代在列表的元素上工作 如果在中为i编写
,则迭代列表中的元素。因此
j
将取
4
5
6
的值。这些值永远不会与
i
的值匹配

无论如何,为什么上述方法效率低下 我们可以通过使用
范围来更改它,我们可以为范围内的i(len(a))
编写
,但这将是低效的:我们将迭代
a
的一个元素和
b
的一个元素的所有可能组合。这将产生一个O(mn)算法,m是
a
中的元素数,n是
b
中的元素数

zip(…)
函数 要同时遍历iterables,我们可以使用
zip(..)
zip
将一个或多个iterables作为输入。然后它将构造元组。因此,如果我们执行
zip(a,b)
,我们将生成一个iterable,它将生成
(a[0],b[0])
,然后是
(a[1],b[1])
,然后是
(a[2],b[2])
,依此类推

命令式方法 现在我们可以将其改写为:

c = []
for ai, bi in zip(a, b):
    c.append(ai + bi)
列表理解 这可以通过列表理解重写为:

多功能编程方法 我们还可以使用
操作符
模块和
操作符。添加
映射
以更有效的方式编写:

from operator import add

c = list(map(add, a, b))

然而,由于一切都是动态的,因此需要注意的是,Haskell中的对象是可变的,从这个意义上讲,它是不起作用的,因此我们不能保证不会有副作用。

这里是另一种使用zip的替代方法,内置求和函数和列表理解

a = [1, 2, 3]
b = [4, 5, 6]
c = [ sum(x) for x in zip(a,b) ]
print c

结果是[5,7,9]

另一种选择

import numpy as np

a = [1, 2, 3]
b = [4, 5, 6]

np.sum((a, b), axis=0)  # array([5, 7, 9])
因为OP正在学习python,所以这并不是特别有用。但我在这里加入它是为了说明有多少种方法可以实现相同的目标


是的,因为
中i的
将迭代元素,而不是索引。要明确的是,列表理解方法也是一种函数式编程方法,可以说是一种更符合Python一般风格的方法。

是的,尽管后者更具功能性,因为我们只使用已经定义的函数。此外,没有副作用(然而,从技术上讲,列表理解可能会有副作用,因为您可以覆盖相同的变量)。列表理解更多的是Python,最后一个是Haskell,非常感谢!在“为什么上面的内容效率低下”一节的末尾,你把我弄丢了。在任何情况下,作为一个初学者程序员,我只想让事情顺利进行,希望以后能学到有效的方法。我还没有达到理解“函数式编程方法”部分的水平,但也许将来我会。再次感谢。我将把这一页加入书签并研究它@WillemVanonSem这个列表理解也是从Haskell那里借来的。
map
功能同样能够触发副作用(并且使用它来触发副作用也是同样错误的),例如
c=[]
list(map(c.append,map(add,a,b))
可以在已经定义好的功能下工作,而且很糟糕,它没有多少功能。@ShadowRanger:不完全,因为Haskell中的列表理解实际上是列表单子的语法糖,它可以做更复杂的事情。例如,在Python中,没有可以应用于其上的函子或应用程序。当然,
list(map(…)
也会有副作用,因为Python中的一切都是动态的。我的意思是你可以介绍我所说的“句法副作用”。例如,我们可以编写
a=[3,4];在Python-2.x中[x代表uu-in[1,2]代表x代表a代表a[(1,2)]
(这就是为什么在Python-2.x中列出理解“泄漏”的原因)。
import numpy as np

a = [1, 2, 3]
b = [4, 5, 6]

np.sum((a, b), axis=0)  # array([5, 7, 9])