在python中找到list元素的右手和左手的总和

时间:2013-03-15 23:27:06

标签: python

列表中所选元素的左右比较总和有什么办法吗? 例如:

li = [2,3,0,9,6]
if selected item is '0', I want to compare sum of 2,3 and 9,6

提前致谢

2 个答案:

答案 0 :(得分:10)

li = [2,3,0,9,6]

如果您获得0(或任何数字):

n = 0
i = li.index(n)     # returns the first location of n (0 in your case)
left = li[:i]       # gives the left part of the list
right = li[i+1:]    #     and the right part
lsum = sum(left)
rsum = sum(right)

但是你必须小心,因为.index会返回该项目的第一个实例。如果您有多个0,则会在首先 0拆分列表。

如果您已获得其职位,请从上方开始i而不进行搜索。

i = 2
left = sum(li[:i])
right = sum(li[i+1:])

请注意,我将最后两行合并在一起,取得总和而不保存单独的列表。

然后,您可以按照自己的意愿比较leftright

答案 1 :(得分:4)

如果有一个partition是一个可用于split输入的单个值,那么 - 类似于askewchan的答案,但可以采取任意的迭代,而不是需要的任何一个能够索引(注意这是滥用lambda):

li = [2,3,0,9,6]

from itertools import takewhile
print (lambda L=iter(li): sum(takewhile(lambda e: e != 0, L)) == sum(L))()
# False

更明智的方式

def partitions_equal(iterable, at):
    i = iter(iterable)
    return sum(iter(i.next, at)) == sum(i)