如果我有一个具有值值的对象的排序列表。是否有更多的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)]
答案 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]