Для l oop, что приводит к неправильному выводу - PullRequest
0 голосов
/ 06 февраля 2020

Приведенный ниже фрагмент кода приводит к [5,7,18,23,50], почему 5 не удаляется из списка результатов?

list1 = [11, 5, 17, 18, 23, 50]  
not_needed = {11, 5}

for e in list1:
    if e in not_needed:
        list1.remove(e)
    else:
        pass

print(list1)

Ответы [ 5 ]

4 голосов
/ 06 февраля 2020

Поскольку вы изменяете список по мере его повторения.

  • Когда вы читаете первый элемент, он равен 11, поэтому он удаляется.

  • Когда вы читаете второй элемент, это 17, потому что первый элемент был удален. Предмет 5 теперь является новым первым предметом, и вы никогда не сможете его проверить.

2 голосов
/ 06 февраля 2020

Используйте понимание списка при циклическом просмотре списка и одновременном его изменении.

list1 = [x for x in list1 if not x in not_needed]
list1
[17, 18, 23, 50]

Подробнее об этом здесь: https://www.analyticsvidhya.com/blog/2016/01/python-tutorial-list-comprehension-examples/

2 голосов
/ 06 февраля 2020

Это связано с тем, что после первой итерации элемент 11 удаляется и переходит ко второму индексу, который становится 17 в списке [5,17,18,23,50]. Лучший способ исправить это - взять список результатов, чтобы вы не должны мутировать "list1"

list1 = [11, 5, 17, 18, 23, 50]
not_needed = {11, 5}
result = []
for e in list1:
    if e in not_needed:
        pass
    else:
        result.append(e)

print(result)
2 голосов
/ 06 февраля 2020

Поскольку после удаления 11, 5 пропускается во время итерации. Вот почему вы никогда не просматриваете список и не удаляете его одновременно.

list1 = [11, 5, 17, 18, 23, 50]
not_needed = {11, 5}

for e in not_needed:
    list1.remove(e)

print(list1)

Дает:

[17, 18, 23, 50]
1 голос
/ 06 февраля 2020

для l oop в python работает по индексам, а не по каждому элементу .

Когда он находит 11 и удаляет его из списка 1, список1 становится [5, 17, 18, 23, 50] но l oop теперь находится на втором элементе. Таким образом, он пропускает 5 в списке.

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