我有一个网址列表,想删除任何不包含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/