Проверьте, находится ли подстрока в списке строк?
Я уже нашел ответы на этот вопрос раньше, но они кажутся устаревшими для текущих версий Python (или, по крайней мере, они не работают для меня).
Я хочу проверить, содержится ли подстрока в списке строк. Мне нужен только логический результат.
Я нашел это решение:
word_to_check = 'or'
wordlist = ['yellow','orange','red']
result = any(word_to_check in word for word in worldlist)
Из этого кода я ожидаю получить значение True
. Если слово было "der", то выход должен быть False
.
Однако результат - это функция-генератор, и я не могу найти способ получить значение True
.
Любая идея?
Ответы
Ответ 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