Фильтрация списка строк на основе содержимого - PullRequest
69 голосов
/ 28 января 2010

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

Ответы [ 5 ]

109 голосов
/ 28 января 2010

Эта простая фильтрация может быть достигнута многими способами с 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']
>>> 
15 голосов
/ 28 января 2010
[x for x in L if 'ab' in x]
9 голосов
/ 28 января 2010
# To support matches from the beginning, not any matches:

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

filter(lambda x: x.startswith(prefix), items)
4 голосов
/ 28 января 2010

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

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

Почему это работает? Поскольку оператор in определен для строк, чтобы означать: «является подстрокой».

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

l = ['a', 'ab', 'abc', 'bac']
result = []
for s in l:
   if 'ab' in s:
       result.append(s)
0 голосов
/ 28 января 2010
mylist = ['a', 'ab', 'abc']
assert 'ab' in mylist
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...