在Python中合并/添加列表

35 投票
8 回答
23359 浏览
提问于 2025-04-11 09:36

我觉得应该有更符合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

不过我觉得这个方法看起来不太优雅,也不太符合Python的风格。除了没有检查二维数组中的所有“行”是否长度相同,是否可以相加等等,还有没有更好的方法呢?

8 个回答

14

另一种方法:

map(sum, zip(*array))
63

[sum(value) for value 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

这里的单星号并不是一个独立的运算符。它的作用是把数组中的元素拆开,变成函数调用时的参数。

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]
71

这段代码是用来处理一些数据的。它的主要目的是从一个地方获取信息,然后对这些信息进行一些操作,最后把结果返回给你。

首先,代码会连接到一个数据库,数据库就像一个大仓库,里面存放着很多信息。接着,它会查询这个数据库,找出你需要的数据。查询的过程就像是在仓库里找东西,你需要告诉它你想要什么。

找到数据后,代码会对这些数据进行处理。处理的方式可能包括计算、过滤或者排序等。想象一下,你在整理一堆文件,把它们按顺序放好,这就是在处理数据。

最后,处理完的数据会被返回给你,这样你就可以使用这些信息了。返回数据的过程就像是把整理好的文件递给你,让你可以方便地查看。

总的来说,这段代码的工作流程就是:连接数据库 -> 查询数据 -> 处理数据 -> 返回结果。

[sum(a) for a in zip(*array)]

撰写回答