Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我会得到';pop索引超出范围';python 3中的错误?_Python_Python 3.x_List_Indexing_Spyder - Fatal编程技术网

为什么我会得到';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