【问题标题】:Python: Sum part of a listPython:对列表的一部分求和
【发布时间】:2017-12-31 05:30:30
【问题描述】:

给定一个列表,我怎样才能找到列表部分的总和?例如:

a = [2,5,4,6,8]
sum(a) = 25

我想知道列表中的一部分是否达到了某个数字。
列表部分应该有一定的长度。这是我的目标:

ex_list = [2,5,4,6,8]
dif_list = partsum(ex_list, 3)
print(dif_list) ==> [11, 13, 15, 12, 14, 16, 15, 17, 19, 18]

“dif_list”中的每个元素都是通过从“ex_list”中取出 3 个数字并将它们相加得出的,即 2+5+4 = 11、2+5+6 = 13、2+5+8 = 15、 2+4+6 = 12 等
也供参考:

ex_list = [2,5,4,6,8]
another_list = partsum(ex_list, 4)
print(another_list) ==> [17, 19, 21, 20, 23]

因为 2+5+4+6 = 17、2+5+4+8 = 19 等
基本上,partsum(thing, num) 将获取 'thing' 的 'num' 个项目,将它们相加,并将其附加到一个新列表中。感谢所有帮助,谢谢!

【问题讨论】:

  • 你需要这个更大的上下文是什么?
  • 所以你想要所有与num 元素及其总和的组合?
  • 如果你想找到partitions,使用组合是效率最低的方法。
  • 所有数字都是正数吗?

标签: python list sum


【解决方案1】:

你想要itertools.combinations

import itertools

lst = [2,5,4,6,8]
combos = itertools.combinations(lst, 3)
# combos is equivalent to
# [ [2, 5, 4], [2, 5, 6], [2, 5, 8],
#   [2, 4, 6], [2, 4, 8], [2, 6, 8],
#   [5, 4, 6], [5, 4, 8], [5, 6, 8],
#   [4, 6, 8] ]
result = [sum(combo) for combo in combos]

【讨论】:

  • 如果您只想有不同的总和,请将最后一行更改为set([sum(combo) for combo in combos])
  • @hansaplast 为什么不是集合理解?
  • @AdamSmith 谢谢!如果组合(lst,3)的列表'lst'中的项目少于3个,这会起作用吗? (或者我最终会发现......)
  • @adamsmith 我正在使用的程序无法导入itertools
  • @ChristopherMarley 很好,然后编写您自己的版本。我不知道为什么你不能导入它,它是标准库 LOL 的一部分!
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 1970-01-01
  • 2015-06-02
  • 2016-06-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多