使用列表元素的总和查找列表的索引

时间:2014-10-20 11:21:34

标签: python

我试图创建一个函数来返回最小元素的索引,该元素的左边所有元素的总和大于数字x

我怎样才能以Pythonic的方式做到这一点?

示例:

我有一个数字列表[32, 6, 12],我试图创建一个函数,如果0,则返回x < 321 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

3 个答案:

答案 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