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

时间:2015-06-20 15:51:31

标签: python python-2.7

我有一个网址列表,并希望删除任何不包含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']

所以从逻辑上讲,我觉得如果我改变它不是在......中。

matching = [s for s in somelist if app not in s]

它会删除所有不包含已批准网址的内容。但是,它什么都不返回。

5 个答案:

答案 0 :(得分: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']

any会在第一场比赛中发生短路,如果你的网址有多个子网,那么它仍会只添加一次网址。

somelist[:]只是意味着我们使用list comp的效率更改原始列表/对象,而不是使用list.remove.的常规for循环

答案 1 :(得分:1)

对于有效的代码版本的最小更改,为什么不直接使用您知道的属性(查找匹配项并使用它们执行某些操作),并更改正在执行的操作,即添加到新列表中从旧的删除?即:

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

然后当你想做更好的事情时,你可以把它变成一个没有副作用的功能......

[编辑:我看到这与上面的答案基本相同,它与我的交叉线!去投票那一个。 :-))

答案 2 :(得分:0)

简明扼要:

results = [url for url in somelist for app in approved if app in url]

答案 3 :(得分:0)

这个是OR,没有第二个FOR循环。同样的结果。

#!/usr/bin/python

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

L=[]

for s in somelist:
        if s.find('imgur') != -1 or s.find('youtube') != -1:
            L.append(s)

somelist=L

print somelist

输出

['imgur.com/9utwj.gif', 'youtube.com/ofskdofk']

答案 4 :(得分:-2)

#!/usr/bin/python

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

L=[]

for s in somelist:
    for app in approved:
        if s.find(app) != -1:
            L.append(s)

somelist=L

print somelist

输出

['imgur.com/9utwj.gif', 'youtube.com/ofskdofk']