给定排序列表,返回尽可能多的元素以达到总计

时间:2018-03-29 10:35:59

标签: python

如果我有一个具有值值的对象的排序列表。是否有更多的pythonic方式返回加起来给定目标的第一个元素?

>>> def func(list, target=0):
     current = 0
     for x in list:
       current += x.value_attr
       yield x
       if current >= target:
         return
>>> [x for x in func(list,target=3000)]

1 个答案:

答案 0 :(得分:0)

另一种懒惰方式是将itertools.accumulate与生成器表达式一起使用:

from itertools import accumulate

lst = [1, 3, 1, 0, -5, 100, 10, 20, -15]

res = next((i for i, j in enumerate(accumulate(lst)) if j >= 20), 0)  # 5

如果您需要累积到目标的所有值,只需使用此结果进行索引:

lst_filter = lst[:res+1]

# [1, 3, 1, 0, -5, 100]