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

Фильтрация списка строк на основе содержимого

Учитывая список ['a','ab','abc','bac'], я хочу вычислить список со строками, в которых есть 'ab'. То есть результат ['ab','abc']. Как это можно сделать в Python?

4b9b3361

Ответ 1

Эта простая фильтрация может быть достигнута многими способами с помощью Python. Наилучший подход - использовать "понимание списков" следующим образом:

>>> lst = ['a', 'ab', 'abc', 'bac']
>>> res = [k for k in lst if 'ab' in k]
>>> res
['ab', 'abc']
>>> 

Другой способ - использовать функцию filter:

>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
>>> 

Ответ 2

[x for x in L if 'ab' in x]

Ответ 3

# To support matches from the beginning, not any matches:

items = ['a', 'ab', 'abc', 'bac']
prefix = 'ab'

filter(lambda x: x.startswith(prefix), items)

Ответ 4

В интерактивной оболочке это быстро испробовалось:

>>> l = ['a', 'ab', 'abc', 'bac']
>>> [x for x in l if 'ab' in x]
['ab', 'abc']
>>>

Почему это работает? Поскольку in operator определяется для строк следующим образом: "является подстрокой".

Кроме того, вам может потребоваться написать цикл, а не использовать синтаксис понимания списка, который использовался выше:

l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
   if 'ab' in s:
       result.append(s)

Ответ 5

mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist

Ответ 6

что, если у вас есть выход, и вы хотите отфильтровать, начиная с определенной фразы и заканчивая определенной фразой? Например, как и следующая фраза, и мне нужно сначала найти xx, а затем отфильтровать 1234?

asdfasdfqwerhq xx 1234 xyz