我有一个 URL 列表,想删除所有不包含 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']
所以从逻辑上讲,我觉得如果我把它改成 NOT in s....
matching = [s for s in somelist if app not in s]
它会删除所有不包含已批准 URL 的内容。但是,它不返回任何内容。
最佳答案
您可以使用 any查看 approved 中的任何字符串是否在某个列表的每个 url 中:
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.remove 的常规 for 循环。
关于python - 如果项目不包含字符串,则从列表中删除项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955946/