Python удалить элемент из списка 1, если он содержит префикс из списка 2 [дубликата]

1

У меня 2 списка

list_links = ['google/order', 'google/faq', 'google/404']
prefixes = ['order', '404']

Мне нужно удалить все элементы из списка list_links, который содержит префиксы

результат должен быть

list_clean = ['google/faq']

Я пытаюсь сделать что-то подобное

for link in list_links:
    for pre in prefixes:
        if pre in link:
            list_links.remove(link)
            break

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

  • 0
    Не могли бы вы показать нам несколько примеров, которые не сработали?
  • 0
    @Prune Прошу прощения, я не слишком заинтересован в этом обмане, потому что он слишком общий, хотя сравнивается со вторым списком. Я также не думаю, что данные ответы являются наиболее эффективными
Показать ещё 1 комментарий
Теги:
list
contains
element

2 ответа

3

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

list_links = ['google/order', 'google/faq', 'google/404']
prefixes = ['order', '404']

result = [e for e in list_links if not any(prefix in e for prefix in prefixes)]

print(result)
  • 0
    Побейте меня тем же решением, но я думаю, что временная сложность может быть улучшена?
1

Вы можете использовать all с endswith:

list_links = ['google/order', 'google/faq', 'google/404']
prefixes = ['order', '404']
new_result = [i for i in list_links if all(not i.endswith(c) for c in prefixes)]

Выход:

['google/faq']
  • 0
    не уверен, что endswith квалифицируется как «префикс»
  • 1
    @andreihondrari Я думаю, что терминология ОП неправильная, элементы prefixes действительно являются суффиксами "google/"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню