Skip to main content
 首页 » 编程设计

python之遍历列表返回负索引

2025年05月04日13EasonJim

我正在解决一个难题,它接受一个列表,遍历每个索引并对当前索引左右两侧的值求和。如果它找到一个索引,其左侧值的总和等于其右侧值的总和,则返回该索引。

例如: [1,2,3,4,3,2,1] 如果我在索引 3(值 4)处,我们会看到其左右元素的值之和相等。 (1 + 2 + 3) = (3 + 2 + 1)。

然而,当输入是一个负值列表时,它返回一个负索引。这是我的代码:

def get_equal_sum(list): 
    for i in list: 
        if sum(list[:i]) == sum(list[i+1:]): 
            print i 
 
list = [1,2,3,4,3,2,1] 
get_equal_sum(list) 
>>> 3 
 
list = [-1,-2,-3,-4,-3,-2,-1] 
get_equal_sum(list) 
>>> -4 

为什么返回 -4 而不是 3?

谢谢!

请您参考如下方法:

当你做的时候

for i in list: 
    if sum(list[:i]) == sum(list[i+1:]): 

i 不是列表的索引,而是值。当您向切片提供负值时,它不会因 IndexError 而崩溃,这是因为只要绝对值在范围内,python 就支持负索引(列表末尾的索引) (这里就是这种情况)。这可能就是您错过它的原因。

如果你想要索引,你必须使用 enumerate 例如:

for i,_ in enumerate(l): 
    if sum(l[:i]) == sum(l[i+1:]): 

(并将list更改为l,因为list是列表类型)

注意 i,_ 符号解压索引/值并丢弃此处不需要的值。你也可以选择经典的:

for i in range(len(l)):