8

Как проверить, является ли строка подстрокой элементов в списке строк?

11

Как мне найти элементы, содержащие строку 'abc' в следующем списке?

xs = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

Следующий код проверяет, есть ли 'abc' в списке, но не находит 'abc-123' и 'abc-456':

if 'abc' in xs:

Есть ли способ выполнить такую проверку, чтобы найти все элементы, которые содержат строку 'abc'?

5 ответ(ов)

13

Чтобы проверить наличие строки '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]
2

Если вам нужно выполнить поиск по нескольким строкам, например, 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.

1

Чтобы получить все элементы, содержащие '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'.

1

Если вам нужно просто узнать, содержится ли 'abc' в одном из элементов, вот самый короткий способ:

if 'abc' in str(my_list):

Примечание: это предположение о том, что 'abc' является алфавитно-цифровым текстом. Не используйте этот способ, если 'abc' может быть просто специальным символом (например, [], ').

0

В вашем коде вы ищете все элементы в списке 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'.

Если у вас есть дополнительные вопросы или нужны разъяснения, не стесняйтесь спрашивать!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь