【问题标题】:Sum elements of same index from different lists对不同列表中相同索引的元素求和
【发布时间】:2021-01-21 10:07:48
【问题描述】:

我有一个列表列表,其中每个内部列表代表电子表格中的一行。使用我当前的数据结构,如何对具有相同索引的内部列表中的每个元素执行操作(这基本上相当于对电子表格中的列执行操作。)

这是我正在寻找的一个例子(就加法而言)

>>> lisolis = [[1,2,3], [4,5,6], [7,8,9]]

>>> sumindex = [1+4+7, 2+5+8, 3+6+9]

>>> sumindex = [12, 15, 18]

这个问题可能可以通过切片来解决,但我不知道如何干净地做到这一点。有没有一个漂亮的工具/库可以为我完成这个?

【问题讨论】:

  • numpy 数组怎么样:np.array(lisolis).sum(0).tolist()?

标签: python python-3.x numpy pandas


【解决方案1】:

只需使用zip:

sumindex = [sum(elts) for elts in zip(*lisolis)]

【讨论】:

  • 如果我将此列表解压缩为字典中的值而不是列表列表,这将如何改变?
  • 应该是*my_dict.values() 而不是*lisolis
【解决方案2】:

@tzaman 有一个很好的列表解决方案,但由于您还在标签中添加了numpy,如果您有一个 numpy 二维数组,还有一个更简单的解决方案:

>>> inport numpy
>>> a = numpy.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
>>> a.sum(axis=0)
array([12, 15, 18])

如果您有大型数组,这应该会更快。

>>> sumindex = numpy.array(lisolis).sum(axis=0).tolist()

【讨论】:

    【解决方案3】:
    >>import pandas as pd 
    >>df = pd.DataFrame([[1,2,3], [4,5,6], [7,8,9]], columns=['A','B','C'])
    >>df.sum()
    A    12
    B    15
    C    18
    

    【讨论】:

    • 虽然这篇文章可能会回答这个问题,但添加一些解释并可能添加一些指向相关文档的链接仍然是一个好主意。具有良好解释和参考的答案通常对当前的 OP 和未来的访问者都更有用。完整详细的答案也更有可能吸引正面投票。
    【解决方案4】:

    list()、map()、zip() 和 sum() 函数可以轻松解决这个问题:

    >>> list(map(sum, zip(*lisolis)))
    [12, 15, 18]
    

    【讨论】:

    • 无需使用list()map(sum, zip(*lisolis)) 已经足够好了。
    • @ComputerFellow 这是一个 Python 3 问题,所以 map() 不够好。在 Python 3 中,map() 返回一个迭代器而不是一个列表。
    【解决方案5】:

    首先我将填写我们想要添加的列表:

    >>> lisolis = [[1,2,3], [4,5,6], [7,8,9]]
    

    然后为我的总和创建一个空列表:

    >>> sumindex = []
    

    现在我将在循环中启动一个循环。我将添加每个小列表中相同位置的数字(即“y”循环),并且将为每个位置执行此操作(即“x”循环)。

    >>> for x in range(len(lisolis[0])):
            z = 0
            for y in range(len(lisolis)):
                z += lisolis[y][x]
        sumindex.append(z)
    

    range(len(lisolis[0])) 给了我小列表的长度,所以我知道有多少位置要加起来,并且 range(len(lisolis)) 给了我小列表的数量,所以我知道需要为列表中的任何特定位置添加多少数字。

    “z”是一个占位符。特定列表位置中的每个数字都将被添加到“z”,直到它们相加。之后,我会将“z”的值放入 sumindex 的下一个槽中。

    要查看结果,我会输入:

    >>>sumindex
    

    这会给我:

     [12, 15, 18]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-17
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      • 1970-01-01
      • 2015-08-26
      相关资源
      最近更新 更多