Как разрешить ошибку pop index out of range в python?

#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