比较时列出超出范围

问题描述

我正在尝试查看列表中两个对象的总和是否等于一个数字。我写了这段代码,当我尝试打印对象索引时,它给了我一个错误-列表超出范围。打印对象时看不到错误-

ls = [2,8,12,7]
for x in ls:
    for y in ls[1::]:
        if x + y == 9:
            print(ls[x],ls[y]) # gives error
            print(x,y) # works fine

我能够使用枚举函数解决该问题,但想知道为什么我在上面的代码中遇到错误

工作代码-

ls = [2,7]
for inx,x in enumerate(ls):
    for iny,y in enumerate(ls[1::]):
        if x + y == 9:
            print(inx,iny)

解决方法

当您使用for循环遍历列表时,例如for x in ls,您要遍历列表的,而不是索引。因此,x将依次为2、8、12、7。并且由于您的列表仅包含4个元素,因此索引8处没有元素,这会导致在尝试访问ls[x]时导致索引超出范围异常。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...