Подтвердить что ты не робот

Проверьте, находится ли подстрока в списке строк?

Я уже нашел ответы на этот вопрос раньше, но они кажутся устаревшими для текущих версий Python (или, по крайней мере, они не работают для меня).

Я хочу проверить, содержится ли подстрока в списке строк. Мне нужен только логический результат.

Я нашел это решение:

word_to_check = 'or'
wordlist = ['yellow','orange','red']

result = any(word_to_check in word for word in worldlist)

Из этого кода я ожидаю получить значение True. Если слово было "der", то выход должен быть False.

Однако результат - это функция-генератор, и я не могу найти способ получить значение True.

Любая идея?

4b9b3361

Ответ 1

Вы можете импортировать any из __builtin__ в случае, если он был заменен некоторым другим any:

>>> from  __builtin__ import any as b_any
>>> lst = ['yellow', 'orange', 'red']
>>> word = "or"
>>> b_any(word in x for x in lst)
True

Обратите внимание, что в Python 3 __builtin__ было переименовано в builtins.

Ответ 2

Код, который вы опубликовали с помощью функции any(), является правильным и должен работать, если вы не переопределили его где-нибудь.

Тем не менее, существует простое и быстрое решение, которое может быть выполнено с помощью поиска подстроки в одной комбинированной строке:

>>> wordlist = ['yellow','orange','red']
>>> combined = '\t'.join(wordlist)

>>> 'or' in combined
True
>>> 'der' in combined
False

Это должно работать намного быстрее, чем при использовании любого из них. Символом объединения может быть любой символ, который не встречается в одном из слов в списке слов.

Ответ 3

Вместо этого вы можете использовать next:

colors = ['yellow', 'orange', 'red'] 
search = "or"

result = next((True for color in colors if search in color), False)

print(result) # True

Чтобы показать строку, содержащую подстроку:

colors = ['yellow', 'orange', 'red'] 
search = "or"

result = [color for color in colors if search in color]  

print(result) # Orange

Ответ 4

Также, если кто-то хочет проверить, существует ли какое-либо из значений словаря в качестве подстроки в списке строк, можно использовать это:

list_a = [
    'Copy of snap-009ecf9feb43d902b from us-west-2',
    'Copy of snap-0fe999422014504b6 from us-west-2',
    'Copy of snap-0fe999422014cscx504b6 from us-west-2',
    'Copy of snap-0fe999422sdad014504b6 from us-west-2'
]
dict_b = {
    '/dev/xvda': 'snap-0fe999422014504b6',
    '/dev/xvdsdsa': 'snap-sdvcsdvsdvs'
}

for b1 in dict_b.itervalues():
    result = next( ("found" for a1 in a if b1 in a1), "not found")
    print result 

Он печатает

not found
found