在python中查找列表元素的右侧和左侧之和

在python中查找列表元素的右侧和左侧之和,python,Python,有没有办法比较列表中所选元素的左和右的总和? 例如: li = [2,3,0,9,6] if selected item is '0', I want to compare sum of 2,3 and 9,6 提前谢谢 li = [2,3,0,9,6] 如果给您0(或任何数字): 但是您必须小心,因为.index返回项目的第一个实例。如果您有多个0,它将在第一个0处拆分列表 如果给定了它的位置,只需从上面的i开始,而无需搜索 i = 2 left = sum(li[:i]) right =

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

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

li = [2,3,0,9,6]
如果给您
0
(或任何数字):

但是您必须小心,因为
.index
返回项目的第一个实例。如果您有多个
0
,它将在第一个
0
处拆分列表

如果给定了它的位置,只需从上面的
i
开始,而无需搜索

i = 2
left = sum(li[:i])
right = sum(li[i+1:])
请注意,我将最后两行合并在一起,在不保存单独列表的情况下求和

然后,您可以随意比较
左侧
右侧

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

但是您必须小心,因为
.index
返回项目的第一个实例。如果您有多个
0
,它将在第一个
0
处拆分列表

如果给定了它的位置,只需从上面的
i
开始,而无需搜索

i = 2
left = sum(li[:i])
right = sum(li[i+1:])
请注意,我将最后两行合并在一起,在不保存单独列表的情况下求和


然后,您可以随意比较

如果有一个
分区
,它是一个可以用来
拆分输入的值,那么-类似于askewchan的答案,但可以采用任意iterable,而不是需要索引的分区(注意这是滥用
lambda
):

更明智的方法

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

如果存在一个
分区
,该分区是一个可用于
拆分
输入的单一值,那么-类似于askewchan的答案,但可以采用任意iterable,而不是需要索引的分区(注意这是对
lambda
的滥用):

更明智的方法

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

选择是否真的是
0
,还是
li[2]
(即所选的值或列表中的位置)?如何定义左/右?对于
li=[1,2,1]
,@JonClements我们必须比较所有列表元素。如果存在
[2,0,3,0,4,0],会发生什么情况
?选择是否真的是
0
,还是
li[2]
(即,是所选的值,还是列表中的位置)?如何定义左/右?对于
li=[1,2,1]
,@JonClements我们必须比较所有列表元素。如果存在
[2,0,3,0,4,0],会发生什么情况
?正如你所说,这是对lambda的滥用,它得到的唯一好处是把3行变成2行,所以…为什么不用pythonic的方式写呢,在一行上写
L=iter(li)
,在下一行上做比较?@abarnet更明智的回答posted“更明智的方式”与“滥用lambda”做的事情不一样方法。它值得展示和解释两者的差异(一个取一个值,另一个取一个索引)-而且也值得在不滥用lambda的情况下编写两者。正如你所说,这是滥用lambda,它唯一的好处是将3行变为2行,所以…为什么不用python方式编写它,使用
L=iter(li)
一行比较,下一行比较?@abarnert more sensible response posted“more sensible way”与“滥用lambda”的方式不一样。值得展示两者并解释差异(一个取值,另一个取索引)-在不滥用lambda的情况下编写这两个函数也是值得的。+1如果0不在列表中,处理异常也会很好。@jurgenreza好的,我会说明零可以更改。+1如果0不在列表中,处理异常也会很好。@jurgenreza好的,我会说明零可以更改。