我有一个网址列表,想删除任何不包含imgur或youtube的网址。

somelist = ['google.com', 'facebook.com', 'imgur.com/9utwj.gif', 'youtube.com/ofskdofk', 'yahoo.com']
approved = ['imgur','youtube']

for app in approved:
    matching = [s for s in somelist if app in s]
    for match in matching:
        somelist.remove(match)
print somelist

这又回来了
['google.com', 'facebook.com', 'yahoo.com']

所以逻辑上,我觉得如果我把这个改成不在s。。。。
matching = [s for s in somelist if app not in s]

它将删除所有不包含批准的URL的内容。但是,它什么也不返回。

最佳答案

您可以使用any查看somelist中的每个url中是否有approved中的任何字符串:

somelist = ['google.com', 'facebook.com', 'imgur.com/9utwj.gif', 'youtube.com/ofskdofk', 'yahoo.com']
approved = ['imgur','youtube']


somelist[:] = [url for url in somelist if any(sub in url for sub in approved)]

print(somelist)
['imgur.com/9utwj.gif', 'youtube.com/ofskdofk']

any将在第一次匹配时短路,如果您的url有多个子字符串,它仍然只添加一次url。
somelist[:]只是意味着我们使用list comp的效率来更改原始列表/对象,而不是使用带有list.remove.的正则for循环

关于python - 如果列表中的项目不包含字符串,则将其删除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30955946/

10-12 21:27