在Python中求列表元素左右手的和

1 投票
2 回答
3520 浏览
提问于 2025-04-17 19:16

有没有什么办法可以比较列表中某个选定元素左边和右边的总和?

比如:

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:])

注意,我把最后两行合并在一起了,直接计算总和,而不是单独保存每个列表。

然后,你可以随意比较 leftright

撰写回答