Редактировать: (оптимизировать производительность понимания списка)
Для оптимизации понимания списка в этом примере, учитывая, что список «поиск» со словами, которые будут удалены, являются уникальнымидо этого он может быть преобразован в set
для улучшения производительности поиска во время понимания списка.
def remove_all_from_other_list(_list, _remove_list):
_remove_list = set(_remove_list)
return [v for v in _list if v not in _remove_list]
Проверьте эту суть: https://gist.github.com/fsschmitt/4b2c8963485e46b4483746624b5a2bff
Чтобы проверить различия в производительности между всемирешения, представленные здесь.
Резюме:
понимание списка : 55,785589082 секунд.
понимание списка с набором : 17,348955028000006 секунд.
фильтрация списка : 79,495240288 секунд.
для циклов : 70,14259565200001 секунд.
Простой способ и сравнительно с лучшей производительностью для удаления дубликатов будет через понимание списка.
def remove_all(_list, value):
return [v for v in _list if v != value]
Хотя вы всегда можете воспользоваться преимуществами метода фильтрации:
def remove_all(_list, value):
return list(filter(lambda v: v != value, _list))
Использование:
>>> remove_all([1, 2, 3, 4, 2, 3], 2)
[1, 3, 4, 3]
Это определенно будет более эффективным, чем вызов 'Метод .remove 'несколько раз и проверка, все ли еще встречаются случаи.
Дайте мне знать специфику решения " избегать понимания списка ", чтобы я мог придумать другой обходной путь, еслинеобходимо.