Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中合并/添加列表_Python_List - Fatal编程技术网

在Python中合并/添加列表

在Python中合并/添加列表,python,list,Python,List,我很确定应该有一种更符合python的方法来实现这一点,但我想不出一种方法:如何将二维列表合并到一维列表中?有点像zip/map,但有两个以上的迭代器 示例-我有以下列表: array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] 我想要 result = [12, 15, 18] # [1+4+7, 2+5+8, 3+6+9] 到目前为止,我想到的是: def add_list(array): number_items = len(array[0])

我很确定应该有一种更符合python的方法来实现这一点,但我想不出一种方法:如何将二维列表合并到一维列表中?有点像zip/map,但有两个以上的迭代器

示例-我有以下列表:

array = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
我想要

result = [12, 15, 18] # [1+4+7, 2+5+8, 3+6+9]
到目前为止,我想到的是:

def add_list(array):
    number_items = len(array[0])
    result = [0] * number_items
    for index in range(number_items):
        for line in array:
            result[index] += line[index]
    return result
但在我看来,这不太优雅。除了不检查2D数组中的所有“线”是否具有相同的长度外,还可以相互添加,等等。有什么更好的方法可以做到这一点?

[sum(value)for value in zip(*array)]是相当标准的

[sum(a) for a in zip(*array)]
这可能有助于您理解它:

In [1]: array=[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [2]: array
Out[2]: [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

In [3]: *array
------------------------------------------------------------
   File "<ipython console>", line 1
     *array
     ^
<type 'exceptions.SyntaxError'>: invalid syntax
zip()是一个内置函数

zip返回的列表的每个元素都是一组您想要的数字


如果你做了很多这类事情,你想了解

将自动为您检查所有阵列大小。求和是用纯C完成的,所以速度很快
scipy
数组也非常节省内存

缺点是您依赖于相当复杂的第三方模块。但这在许多方面都是一个很好的折衷办法。

另一种方法:

map(sum, zip(*array))

同意fivebells,但您也可以使用Numpy,它是一种更小(更快的导入)和更通用的类似数组的实现。(实际上,它是scipy的一个依赖项)。这些都是很好的工具,如前所述,如果你处理此类操作,它们是“必须使用的”。

游戏进行得太晚了,答案不如其他一些好,但我觉得它有点可爱:

map(lambda *x:sum(x),*array)
很遗憾,
sum(1,2,3)
不起作用。如果是这样的话,我们可以消除其中愚蠢的lambda,但我想这会使我们很难辨别哪些元素(如果有的话)是求和的“起点”。您必须将其更改为只包含关键字的参数,这将破坏许多脚本。。。哦,好吧。我想我们只能和lambda一起生活了

[压缩格式(*数组)中的总和(a)]

我喜欢这样。我需要一些相关的东西来将对象交错到一个项目列表中,我想出了一些类似的东西,但对于偶数长度的列表更简洁:

sum(zip(*array),())
例如,交错两个列表:

a = [1,2,3]
b = ['a','b','c']
sum(zip(a,b),())
(1, 'a', 2, 'b', 3, 'c')

您可以简单地执行以下操作:

print [sum(x) for x in zip(*array)]
如果希望以这种方式遍历列表,可以使用
itertools
模块的
chain

from itertools import chain

for x in array.chain.from_iterable(zip(*array)):
    print x   
# prints 1, 4, 7, 2, 5, 8, ...

嗯,虽然很有趣,但这并不是这个问题的答案(因此可能会吸引反对票)。例如,你可以问一个问题“我怎样才能把几个列表交错起来?”然后自己回答。可能会使用一个使用两个以上列表的示例,否则会有人建议
“,”。加入(a)
。同意。一个处理交错列表的线程指向了这个“q&a”的恰当说法,但标记为这个问题的重复!为了简单起见,我在示例中使用了“,”,我的代码要求用户定义类的实际列表交错,但这在抽象中很难解释。
sum(zip(*array),())
a = [1,2,3]
b = ['a','b','c']
sum(zip(a,b),())
(1, 'a', 2, 'b', 3, 'c')
print [sum(x) for x in zip(*array)]
from itertools import chain

for x in array.chain.from_iterable(zip(*array)):
    print x   
# prints 1, 4, 7, 2, 5, 8, ...