在Python中求列表元素左右手的和
有没有什么办法可以比较列表中某个选定元素左边和右边的总和?
比如:
li = [2,3,0,9,6]
if selected item is '0', I want to compare sum of 2,3 and 9,6
提前谢谢你!
2 个回答
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)
11
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:])
注意,我把最后两行合并在一起了,直接计算总和,而不是单独保存每个列表。
然后,你可以随意比较 left
和 right
。