Почему я получаю ошибку «всплывающий индекс вне допустимого диапазона» в python 3? - PullRequest
0 голосов
/ 05 августа 2020

У меня проблема с функцией 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). Это дает

IndexError: pop index out of range

Так в чем проблема с L.pop(i)?

1 Ответ

0 голосов
/ 05 августа 2020

Думаю, вы сбиваете с толку pop (удалить элемент по индексу) и remove (удалить сам элемент). С помощью for i in L: вы повторяете элементы, но затем в ваших print и L.pop(i) вы обрабатываете их как индекс.

Предполагая, что вы хотите напечатать index первого element , который больше limit, а затем удалить этот элемент, вы можете попробовать следующее:

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, при повторении одного и того же списка, как правило, немного проблематично c. В этом случае это нормально, так как вы break из l oop сразу после удаления элемента, но имейте это в виду, если вы хотите расширить это, например, удалив все элементы, которые больше чем limit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...