我有一个URL列表,并希望删除任何不包含imgur或youtube的URL.
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
Run Code Online (Sandbox Code Playgroud)
这回来了
['google.com', 'facebook.com', 'yahoo.com']
Run Code Online (Sandbox Code Playgroud)
所以从逻辑上讲,我觉得如果我改变它不是在......
matching = [s for s in somelist if app not in s]
Run Code Online (Sandbox Code Playgroud)
它会删除所有不包含已批准URL的内容.但是,它什么也没有返回.
您可以使用any来查看某个列表中是否包含已批准的任何字符串:
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']
Run Code Online (Sandbox Code Playgroud)
any 将在第一场比赛中发生短路,如果您有多个子串的网址,它仍然只会添加一次网址.
这somelist[:]意味着我们使用列表comp的效率而不是使用常规for循环来更改原始列表/对象list.remove.