Почему я не могу удалить определенный элемент из вложенного списка при установке некоторых критериев?

#python-3.x #list

#python-3.x #Список

Вопрос:

Я пытаюсь удалить некоторый нежелательный результат из моего вложенного списка, но когда я попробовал это:

 ppp =  [[132],[127, 236],[133, 259]]
for p in ppp:
    if len(p) == 2:
        ppp.remove(p)
print(ppp)
  

Результат был:

 [[132], [133, 259]]
  

Он удалил, [127,236] но не удалил [133, 259] то, что также должно быть удалено.

Как это должно произойти?

Ответ №1:

Не разрешается удалять элементы из list во время итерации по нему. Вот почему у вас здесь такое странное поведение — после удаления размер [127, 236] коллекции уменьшился, 3-й элемент стал 2-м, и цикл завершен, потому что он думал, что код достиг конца list (обработал 2 элемента из 2). Исправленный код:

 ppp = [[132], [127, 236], [133, 259]]
ppp = [p for p in ppp if len(p) != 2]  # list comprehension does the trick
print(ppp)
  

Вывод:

[[132]]