#python #list #while-loop
#python #Список #цикл while
Вопрос:
Это мой код:
while k != 24:
p1 = random.choice(list1)
p2 = random.choice(list1)
r = (p1, p2)
list2.append(r)
l = list1.index(p1)
p = list1.index(p2)
list1.pop(l)
list1.pop(p)
k = 1
если я запускаю этот код, выдается следующая ошибка:
Traceback (most recent call last):
File "F:/PyCharm/pythonProject1/main.py", line 24, in <module>
list1.pop(p)
IndexError: pop index out of range
он отлично работает, когда есть только одна команда pop:
while k != 24:
p1 = random.choice(list1)
p2 = random.choice(list1)
r = (p1, p2)
list2.append(r)
#l = list1.index(p1)
p = list1.index(p2)
#list1.pop(l)
list1.pop(p)
k = 1
Почему появляется сообщение о вышеупомянутой ошибке, когда я использую две pop-команды в одном цикле и отлично работает с одной pop-командой?
Комментарии:
1. Просто переместите строку
p = list1.index(p2)
сразу после первогоpop
вызова, потому что первыйpop
вызов изменяет список, и индексp2
становится неправильным в случае, когдаl <= p
.2. При первом использовании
pop
все индексы сдвигаются вправо.3. @sergey спасибо вам и @juanpa.arrivillaga Я знаю, что именно поэтому я использую это, иначе я бы напрямую использовал
list1.pop(p2)
Ответ №1:
Просто переместите строку p = list1.index(p2)
прямо перед ее заполнением, потому что первый pop
вызов изменяет список, и индекс p2
становится неправильным в случае, когда l <= p
. Итак, код должен выглядеть так
while k != 24:
p1 = random.choice(list1)
p2 = random.choice(list1)
r = (p1, p2)
list2.append(r)
l = list1.index(p1)
list1.pop(l)
p = list1.index(p2)
list1.pop(p)
k = 1