python, очистка списка - PullRequest
       6

python, очистка списка

2 голосов
/ 23 июня 2011

Пытаясь очистить список 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 ]

2 голосов
/ 23 июня 2011

Попробуйте использовать следующий генератор:

def remove_similar(array, exclude):
    for item in array:
        for fault in exclude:
            if fault in item:
                break
        else:
            yield item
1 голос
/ 23 июня 2011

Это то, что вы ищете?

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']
1 голос
/ 23 июня 2011
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)
1 голос
/ 23 июня 2011

Я не уверен, что вы спрашиваете здесь.Вы хотите отфильтровать все элементы в array, которые являются подстроками элемента exclude?Если это так, вы можете заменить свою строку

if item not in exclude:

на что-то вроде

if not any(item in e for e in exclude):
0 голосов
/ 23 июня 2011

как насчет:

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

, который вернет True, если ни одна из исключаемых строк не найдена как подстрока в s.


, если вы имеете в виду частичноечто s является подстрокой e, тогда:

not any( e.find(s) != -1 for e in exclude )

вернет True, если s не найден в качестве подстроки ни в одной из строк в exclude

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...