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

时间:2018-01-27 19:38:50

标签: python list sum

我试图创建一个代码块,我可以在其中添加两个包含整数的列表。也就是说,如果列表a = [1,2,3]并且列表b = [4,5,6],那么我想指定一个列表c,它添加(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)

我应该改变什么?

4 个答案:

答案 0 :(得分:9)

<item name="textSizeTertiary">18sp</item> 可以解决问题:

zip()
  

[5,7,9]

答案 1 :(得分:3)

迭代适用于列表

元素

如果您编写for i in a,则会迭代列表中的元素。因此j将采用值456。这些永远不会匹配i的值。

为什么以上效率低下

我们可以使用range来更改它,我们可以编写for i in range(len(a)),但这样效率很低:我们将迭代a的一个元素的每个可能组合b。这将导致 O(mn)算法, m a中的元素数量, n 的数量b中的元素。

zip(..)函数

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

势在必行的方法

现在我们可以将其重写为:

c = []
for ai, bi in zip(a, b):
    c.append(ai + bi)

列表理解

可以使用 list comprehension 将其重写为:

c = [ai + bi for ai, bi in zip(a, b)]

更多函数式编程方法

我们还可以使用operator模块并使用operator.addmap以更实用的方式编写它:

from operator import add

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

因为一切都是动态的,所以重要的是要注意它在Haskell中的对象是可变的意义上不起作用,因此我们不能保证不存在副作用这一事实。

答案 2 :(得分:3)

这是另一种使用zip,内置和函数和列表理解

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

结果是[5,7,9]

答案 3 :(得分:2)

另一种选择。

import numpy as np

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

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

由于OP正在学习python,这不是特别有用。但我在此处将其包含在内,以表明有多种方法可以实现相同的目标。

numpy专为优化数值计算而设计。