【问题标题】:python delete element from list 1 if it contains prefix from list 2 [duplicate]python从列表1中删除元素,如果它包含来自列表2的前缀[重复]
【发布时间】:2018-12-21 19:57:25
【问题描述】:

我有 2 个列表

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

我需要从 list_links 中删除所有包含 prefixes

的元素

结果必须是

list_clean = ['google/faq']

我正在尝试做这样的事情

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

但它跳过了一些元素,我认为这是因为我无法从我正在循环的列表中删除元素 我用谷歌搜索了很多例子,但都是数字,对我没有用

【问题讨论】:

  • 你能给我们展示一些不起作用的例子吗?
  • @Prune 我不太喜欢这里的欺骗,因为它太笼统了,而这是与第二个列表进行比较。我也不认为给出的答案是最有效的
  • prefixes = set(prefixes) 然后result = [item for item in list_links if item.split('/')[1] not in prefixes] 可能更快

标签: python list element contains


【解决方案1】:

你不应该同时迭代和删除,而是使用list comprehension

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)

【讨论】:

  • 用同样的解决方案打败我,但我认为时间复杂度可以提高?
【解决方案2】:

您可以将allendswith 一起使用:

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']

【讨论】:

  • 不确定endswith 是否符合“前缀”的条件
  • @andreihondrari 我认为OP的术语不正确,prefixes 的元素实际上是"google/" 的后缀
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-16
相关资源
最近更新 更多