如果列表中的最后n个元素大于数字

时间:2015-11-12 22:19:36

标签: python list python-2.7

给出一个数字列表:

ar =[1,2,3,4,5,6,7,8,9,10]

如果最后n个数字总和大于给定数字,我需要找到列表的剩余部分。例如,如果给定的数字是25,则返回的“余数”列表将是[1,2,3,4,5,6,7],因为最后3个元素加起来为27。

我有一些代码,但是我得到了咄咄逼人的怀疑,即它是非常低效的,失败了,考虑到任务的简单性,过于冗长。

def kp_find(ar, level):

    kp1=[]    
    for k in range(len(ar)): #this is required as in reality there is some
        kp1.append(k)        #work to be done within this loop 

    kp_fin = sorted(kp1,reverse = True)

    kp2=[]
    for k in kp_fin:
        kp2.append(k)
        sm_it = sum([i for i in kp2])
        if sm_it>level:
            place = [i for i, j in enumerate(kp_fin) if j == k]
            break
        else:
            place = []

    if place:
        return kp_fin[place[0]:len(kp1)]

print kp_find(ar,24)

正如你所看到的那样,对于那些微不足道的东西,有很多代码;欢迎任何帮助。

1 个答案:

答案 0 :(得分:2)

对于一个简单的任务来说,似乎有很多代码。您可以从列表的右端弹出元素,直到满足条件。像这样:

>>> def kp_find(ar, level):
...     result = ar[:]
...     sum_ = 0
...     while sum_ < level:
...         sum_ += result.pop()
...     return result
... 
>>> kp_find([1,2,3,4,5,6,7,8,9,10], 25)
[1, 2, 3, 4, 5, 6, 7]