如果项目不包含字符串,则从列表中删除项目

use*_*250 2 python python-2.7

我有一个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的内容.但是,它什么也没有返回.

Pad*_*ham 6

您可以使用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.

  • 也许你可以解释一下你认为切片运算符在这里给你的是什么。 (2认同)