Как проверить, является ли строка подстрокой элементов в списке строк?
Как мне найти элементы, содержащие строку 'abc'
в следующем списке?
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
Следующий код проверяет, есть ли 'abc'
в списке, но не находит 'abc-123'
и 'abc-456'
:
if 'abc' in xs:
Есть ли способ выполнить такую проверку, чтобы найти все элементы, которые содержат строку 'abc'
?
5 ответ(ов)
Чтобы проверить наличие строки 'abc'
в любом элементе списка, можно использовать следующий код:
xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in xs):
...
Чтобы получить все элементы, содержащие 'abc'
, используйте следующий подход:
matching = [s for s in xs if "abc" in s]
Если вам нужно выполнить поиск по нескольким строкам, например, abc
и def
, можно комбинировать два выражения-генератора следующим образом:
matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]
Выходные данные будут следующие:
['abc-123', 'def-456', 'abc-456']
Таким образом, вы отфильтруете элементы из my_list
, которые содержат хотя бы одну из строк из списка matchers
.
Чтобы получить все элементы, содержащие 'abc'
, можно использовать функцию filter
следующим образом:
>>> xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> list(filter(lambda x: 'abc' in x, xs))
['abc-123', 'abc-456']
Также можно использовать генератор списков:
>>> [x for x in xs if 'abc' in x]
Оба метода дадут вам список всех элементов, содержащих подстроку 'abc'
.
Если вам нужно просто узнать, содержится ли 'abc' в одном из элементов, вот самый короткий способ:
if 'abc' in str(my_list):
Примечание: это предположение о том, что 'abc' является алфавитно-цифровым текстом. Не используйте этот способ, если 'abc' может быть просто специальным символом (например, [], ').
В вашем коде вы ищете все элементы в списке L
, которые содержат строку x
. Вы используете списковое включение для этого. Вот что происходит в вашем коде:
x = 'aaa' # Строка, которую мы ищем
L = ['aaa-12', 'bbbaaa', 'cccaa'] # Список строк, в которых будем искать
# Используем списковое включение для получения списка, состоящего из тех строк, которые содержат x
res = [y for y in L if x in y]
После выполнения этого кода, переменная res
будет содержать все элементы из L
, в которых встречается строка x
. В данном случае res
будет равно ['aaa-12', 'bbbaaa']
, так как оба этих элемента содержат подстроку 'aaa'
.
Если у вас есть дополнительные вопросы или нужны разъяснения, не стесняйтесь спрашивать!
Почему используется string.join(list), а не list.join(string)?
Удалить пустые строки из списка строк
Как преобразовать строковое представление списка в список?
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе
Вывод строки в текстовый файл