我正在解决一个难题,它接受一个列表,遍历每个索引并对当前索引左右两侧的值求和。如果它找到一个索引,其左侧值的总和等于其右侧值的总和,则返回该索引。
例如: [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)):
关于python - 遍历列表返回负索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43525168/