Python按特定顺序在列表中添加整数
我试图创建一个代码块,在其中我可以将两个包含整数的列表添加到一起。也就是说,如果列表a=[1,2,3]和列表b=[4,5,6],那么我想分配一个添加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[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])