我想看看列表中两个对象的和是否等于一个数字。我写了这段代码,当我尝试打印对象的索引时,它给了我一个超出范围的错误列表。当我打印对象时,我没有看到错误-
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
我可以通过使用enumerate函数来解决这个问题,但我想知道为什么上面的代码会出错。
工作代码-
ls = [2,8,12,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]
时出现索引超出范围的异常。