问题描述
我正在尝试查看列表中两个对象的总和是否等于一个数字。我写了这段代码,当我尝试打印对象索引时,它给了我一个错误-列表超出范围。打印对象时看不到错误-
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]
时导致索引超出范围异常。