【问题标题】:Python: Summing x elements in a listPython:对列表中的 x 个元素求和
【发布时间】:2018-05-17 03:28:49
【问题描述】:

我无法使用搜索功能找到答案,所以我开始了这个帖子。

考虑有一个可以被 x 整除的列表。 例如:

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

在这种情况下,示例 x 将是 3。

现在我想用

创建一个新列表
len(onetonine)/x

elements,这意味着 3 个元素。

重要的部分是,我希望新列表的元素是旧列表中每个 x 元素的总和。 这意味着:

newlist = [6, 15, 24]

所以基本上从我的旧列表中取出 x=3 个元素并添加它们。重复直到完成。

我无法为此找到可行的解决方案,因此我寻求帮助。

谢谢。

【问题讨论】:

标签: python list sum


【解决方案1】:

以下对适当切片总和的列表理解将起作用:

>>> [sum(onetonine[i:i+3]) for i in range(0, len(onetonine), 3)]
[6, 15, 24]

注意:如果原始列表的长度不能被块长度整除,则不会丢弃任何剩余部分,而只是添加最后一个(较短)块的总和。

【讨论】:

    【解决方案2】:

    你也可以使用map:

    onetonine = [1,2,3,4,5,6,7,8,9]
    
    newList = list(map(lambda index: sum(onetonine[index:index+3]), range(0,len(onetonine),3)))
    print(newList)
    

    输出:

    [6, 15, 24]
    

    【讨论】:

      【解决方案3】:

      我赞成 schwobaseggl,但也发生了类似的事情。

      我们还可以检查 mod 是否等于 0:

      x = 3
      
      if len(onetonine) % x == 0:
          result = [sum(onetonine[i:i+x]) for i in range(0, len(onetonine), x)]
      else:
          result = 'Error!'
      

      【讨论】:

        【解决方案4】:
        def group_sums(lst, x): # use better name, no idea for me
            new = []
            for i in range(len(lst)//x):
                new.append(sum(lst[i*x:i*x+x]))
            return new
        

        P.S.:我很高兴它可以工作,现在就开发它:)

        【讨论】:

          【解决方案5】:

          使用 zip(*([iter(onetonine)]*3)) 将列表拆分为 3 个子列表

          onetonine = [1,2,3,4,5,6,7,8,9]
          [sum(i) for i in zip(*([iter(onetonine)]*3))]
          #[6, 15, 24]
          

          【讨论】:

            猜你喜欢
            • 2016-02-27
            • 1970-01-01
            • 2016-03-15
            • 2012-07-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-02-23
            相关资源
            最近更新 更多