python从列表1中删除元素,如果它包含列表2中的前缀

python从列表1中删除元素,如果它包含列表2中的前缀,python,list,element,contains,Python,List,Element,Contains,我有两张单子 list_links = ['google/order', 'google/faq', 'google/404'] prefixes = ['order', '404'] 我需要删除列表链接中包含前缀的所有元素 结果必须是 list_clean = ['google/faq'] 我正试着做这样的事情 for link in list_links: for pre in prefixes: if pre in link: list_

我有两张单子

list_links = ['google/order', 'google/faq', 'google/404']
prefixes = ['order', '404']
我需要删除列表链接中包含前缀的所有元素

结果必须是

list_clean = ['google/faq']
我正试着做这样的事情

for link in list_links:
    for pre in prefixes:
        if pre in link:
            list_links.remove(link)
            break
但它跳过了一些元素,我想这是因为我无法从我目前正在循环的列表中删除元素
我在谷歌上搜索了很多例子,但都是数字,对我来说不起作用

你可以使用
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']

您可以将
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']

您不应同时迭代和删除,而应使用:


您不应同时迭代和删除,而应使用:


你能给我们看一些不起作用的例子吗?@Prune我不太喜欢这里的dupe,因为它太笼统了,而这与第二个列表相比。我也不认为给出的答案可能是最有效的
prefixes=set(prefixes)
,然后
result=[列表中的项对项链接如果item.split('/')[1]不在前缀中]
可能是最快的。你能给我们展示一些不起作用的例子吗?@Prune我不太喜欢这里的重复,因为它太一般,而这是比较第二个列表。我也不认为给出的答案可能是最有效的
prefixes=set(prefixes)
,然后
result=[列表中项目的项目链接如果是项目。split('/')[1]不在前缀中]
可能是最快的。不确定
endswith
是否符合“前缀”@andrehondrari我认为OP的术语不正确,
前缀
的元素实际上是
“google/”的后缀
不确定
endswith
是否符合“前缀”@andreihondrari我认为OP的术语不正确,
前缀
的元素实际上是
“google/”
的后缀,但是我认为时间复杂度可以提高?用同样的解决方案比我快,但是我认为时间复杂度可以提高吗?