Как указывал @Jan, вы не должны изменять список во время итерации, так как это может вызвать нежелательное поведение. Вместо этого вы можете создать другой список с использованием списка:
my_list = ['aaa', 'xxx', 'bbb', 'ccc', 'xxx', 'bb']
my_dict = {111:'aaa', 222:'bbb', 333:'ccc', 444:'ddd'}
my_new_list = [value for value in my_list if value in my_dict.values()]
Чтобы выяснить, почему не следует изменять список во время его циклического просмотра: удаление значения из списка изменяет индекс всех следующих элементы. Например, если у меня есть список ['a', 'b', 'c', 'd', 'e']
и я удаляю значение 'c'
, у значений 'd'
и 'e'
их индексы будут вычтены на 1, поскольку список теперь будет ['a', 'b', 'd', 'e']
. Проблема в том, что for
перебирает список по их индексам, что может привести к пропуску значения 'd'
из итерации. Пример кода:
>>> my_list = ['a', 'b', 'c', 'd', 'e']
>>> for value in my_list:
... print(value)
... if value == 'c':
... my_list.remove(value)
...
a
b
c
e