python - 遍历列表返回负索引

标签 python python-2.7 list for-loop

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

例如: [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/

相关文章:

list - 为什么 Haskell 给出 "ambiguous type variable"错误?

Python - 使用 structlog 从多个模块记录

python - scrapy输出标题和相关链接

python - 正则表达式点不起作用

Pythonic 获取数组元素,如果不存在则获取默认值

php - 如何检查数组是否为列表?

python - 对于 argparse,子解析器本质上是相互排斥的吗?

python - 为什么这个方法被调用两次(pytest)

Python 描述符在 Python 2.7 中不起作用

python - 使用 numpy 数组左移 1