我试图创建一个函数来返回最小元素的索引,该元素的左边所有元素的总和大于数字x
。
我怎样才能以Pythonic的方式做到这一点?
示例:
我有一个数字列表[32, 6, 12]
,我试图创建一个函数,如果0
,则返回x < 32
,1
x < 32 + 6
}和2
if x < 32 + 6+ 12
非Pythonic方式将是:
a = [23,3,32]
i = 0
summ = 0
found = False
def example(e):
while not found:
if e <= (a[i] + summ):
found = True
element = i
else:
summ += a[i]
i += 1
return element
答案 0 :(得分:4)
def find_index(a, x):
for i, e in enumerate(a):
x -= e
if x < 0:
return i
return i
答案 1 :(得分:1)
这是一个非常好的功能性方法:
import itertools
import operator
xs = [32, 6, 12]
target = 5
next(i for i, x in enumerate(itertools.accumulate(xs, operator.add)) if x > target)
在列表的末尾,它会引发StopIteration
。
答案 2 :(得分:0)
找到了不同的解决方案
>>> xs = [18,30,307]
>>> element = 40
>>> target = [sum(xs[:i+1]) for i, elem in enumerate(xs)]
>>> target.index((i for i in target if i>element).next())
1
使用过滤器
>>> target.index(filter(lambda x: x > element, target)[0])
1
使用过滤器+生成器
>>> import itertools
>>> target.index(itertools.ifilter(lambda x: x > element, target).next())
1