当前位置:  开发笔记 > 编程语言 > 正文

在Python中合并/添加列表

如何解决《在Python中合并/添加列表》经验,为你挑选了4个好方法。

我很确定应该有更多的Pythonic方法 - 但是我想不出一个:如何将二维列表合并到一维列表中?类似于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

但对我来说,这看起来并不是非常优雅/ Pythonic.除了不检查2D阵列中的所有"线"是否具有相同的长度,可以相互添加等等.有什么更好的方法呢?



1> Ned Batcheld..:
[sum(a) for a in zip(*array)]



2> Charles Merr..:

[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 "", line 1
     *array
     ^
: invalid syntax

一元星不是运营商本身.它将数组元素解包为函数调用的参数.

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

zip()是一个内置函数

In [5]: zip(*array)[0]
Out[5]: (1, 4, 7)

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

In [6]: sum(zip(*array)[0])
Out[6]: 12

In [7]: [sum(values) for values in zip(*array)]
Out[7]: [12, 15, 18]



3> ngn..:

另一种方式:

map(sum, zip(*array))



4> Alex Coventr..:

如果你做了很多这样的事情,你想要了解scipy.

>>> import scipy
>>> sum(scipy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]))
array([12, 15, 18])

将自动检查所有阵列大小.总和是用纯C完成的,所以它非常快. scipy数组也非常有效.

缺点是你依赖于一个相当复杂的第三方模块.但对于许多目的而言,这是一个非常好的权衡.

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有