python,清理列表

时间:2011-06-23 17:15:58

标签: python string

尝试清理python列表,我能够删除确切的字符串匹配。如何删除部分匹配?

exclude = ['\n','Hits','Sites','blah','blah2','partial string','maybe here']
newlist = []
for item in array:
    if item not in exclude:
        newlist.append(item)

这里的问题是“项目不在排除中”......它完全匹配。

我应该使用以下方法:

s = "This be a string"
if s.find("is") == -1:
    print "No 'is' here!"
else:
    print "Found 'is' in the string."

在某种程度上我回答了我自己的问题:)我猜是否有一个操作数替代'in'?

由于

5 个答案:

答案 0 :(得分:2)

请尝试使用以下生成器:

def remove_similar(array, exclude):
    for item in array:
        for fault in exclude:
            if fault in item:
                break
        else:
            yield item

答案 1 :(得分:1)

我不确定你在这里问的是什么。是否要过滤掉arrayexclude元素的子字符串中的所有元素?如果是这样,您可以替换您的行

if item not in exclude:

类似

if not any(item in e for e in exclude):

答案 2 :(得分:1)

exclude = ['\n','Hits','Sites','blah','blah2','partial string','maybe here']
newlist = []
for item in array:
        ok = True
        for excItem in exclude:
                if excItem in item: 
                    ok = False
                    break
        if ok: newlist.append(item)

答案 3 :(得分:1)

这是你在寻找什么?

blacklist = ['a', 'b', 'c']
cleaned = []
for item in ['foo', 'bar', 'baz']:
    clean = True
    for exclude in blacklist:
        if item.find(exclude) != -1:
            clean = False
            break
    if clean:
        cleaned.append(item)
print cleaned # --> ['foo']

答案 4 :(得分:0)

怎么样:

all( s.find(e) == -1 for e in exclude )

如果在True中找不到任何排除字符串作为子字符串,则会返回s


如果部分意味着se的子字符串,那么:

not any( e.find(s) != -1 for e in exclude )
如果在True

中的任何字符串中找不到s作为子字符串,

将返回exclude