Учитывая список ['a','ab','abc','bac']
, я хочу вычислить список со строками, которые 'ab'
в них есть. Т.е. результат есть ['ab','abc']
. Как это можно сделать в Python?
102
Эта простая фильтрация может быть достигнута разными способами с помощью Python. Наилучший подход - использовать "понимание списка" следующим образом:
>>> lst = ['a', 'ab', 'abc', 'bac']
>>> [k for k in lst if 'ab' in k]
['ab', 'abc']
Другой способ - использовать filter
функцию. В Python 2:
>>> filter(lambda k: 'ab' in k, lst)
['ab', 'abc']
В Python 3 он возвращает итератор вместо списка, но вы можете привести его:
>>> list(filter(lambda k: 'ab' in k, lst))
['ab', 'abc']
Хотя лучше использовать понимание.
lambda
идеальный компаньонfilter
в этом случае? Я считаю, что писать отдельную функцию только для проверки того,ab
входит ли она в данный список, - это излишество. Итак, мы пишем более общую функцию, которая в основном является оболочкой дляin
оператора. Как бы вы использовалиfilter
более понятный способ безlambda
здесь?[x for x in L if 'ab' in x]
источник
# To support matches from the beginning, not any matches: items = ['a', 'ab', 'abc', 'bac'] prefix = 'ab' filter(lambda x: x.startswith(prefix), items)
источник
Быстро опробовал это в интерактивной оболочке:
>>> 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)
источник
mylist = ['a', 'ab', 'abc'] assert 'ab' in mylist
источник