为什么我会得到';pop索引超出范围';python 3中的错误?
我的为什么我会得到';pop索引超出范围';python 3中的错误?,python,python-3.x,list,indexing,spyder,Python,Python 3.x,List,Indexing,Spyder,我的L.pop(I)功能有问题。这是我的密码: L = [] for i in range(3): value = int(input('Enter value ' + str( i+1)+ ': ')) L.append(value) print(L) limit = int(input('Enter a limit: ')) for i in L: if i > limit: print('Index of first eleme
L.pop(I)
功能有问题。这是我的密码:
L = []
for i in range(3):
value = int(input('Enter value ' + str( i+1)+ ': '))
L.append(value)
print(L)
limit = int(input('Enter a limit: '))
for i in L:
if i > limit:
print('Index of first element over',limit,':',i)
L.pop(i)
break
print(L)
它一直工作到以下部分:L.pop(i)
。
它给
那么
L.pop(i)
有什么问题呢?我认为您混淆了pop
(删除索引中的元素)和删除
(删除元素本身)。在L:中使用for i迭代元素,但在打印中和L.pop(i)
将它们视为索引
假设要打印大于限制的第一个元素的索引,然后删除该元素,可以尝试以下操作:
for i in range(len(L)):
if L[i] > limit:
print('Index of first element over',limit,':',i)
L.pop(i)
break
或者这个:
for i, e in enumerate(L)::
if e > limit:
print('Index of first element over',limit,':',i)
L.pop(i) # or L.remove(e), but pop might be a bit faster
break
注意:从列表中删除元素,无论是通过remove
还是pop
,同时迭代相同的列表通常都有点问题。在这种情况下,您可以在移除元素后立即从循环中断开,但请记住这一点,以防您想将其扩展到,例如移除所有大于限制的元素尝试在行L.pop(i)
之前打印i
和len(L)
,这应该会澄清它;)我认为您混淆了pop
(在索引中删除)和remove
(删除元素)@tobias_k您是否也遇到了与remove
相同的问题?@Gsk取决于您的意思。这里实际上没有“在循环中删除”的问题,因为删除元素后OP会中断。然而,OP真正想要实现的目标还不清楚,例如,删除第一个元素大于limit
,或者全部,以及是否应该将limit与元素本身或其索引进行比较。@tobias_k yep,我的错。在阅读之前,先进行假设(.pop()
和pop索引超出范围
是经典!)
for i, e in enumerate(L)::
if e > limit:
print('Index of first element over',limit,':',i)
L.pop(i) # or L.remove(e), but pop might be a bit faster
break