Я хочу, чтобы строки фильтра были в списке на основе регулярного выражения.Регулярные выражения: Искать в списке
Есть ли что-то лучше, чем [x for x in list if r.match(x)]
?
Я хочу, чтобы строки фильтра были в списке на основе регулярного выражения.Регулярные выражения: Искать в списке
Есть ли что-то лучше, чем [x for x in list if r.match(x)]
?
filter(r.match, list)
Полное Пример:
import re
mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"]
r = re.compile(".*cat")
newlist = filter(r.match, mylist)
print str(newlist)
Печать:
['cat', 'wildcat', 'thundercat']
Привет, Когда я запускаю приведенный выше код, я получаю '<объект фильтра в 0x1057acda0>' Что я делаю неправильно? – Joshua
В соответствии с документами python (python 2.7.12): https://docs.python.org/2/library/functions.html#filter фильтр возвращает список, а не объект. Вы также можете проверить этот код: https://repl.it/X3G/5786 (просто нажмите пробег) – Mercury
Спасибо. Я использую Python 3.5.2 на Mac. Я попробовал вашу ссылку. Конечно, он работает, хотя и не уверен, почему я получаю этот msg. Я даже удалил 'str', так как' filter' возвращает список в любом случае, безрезультатно ... – Joshua
На самом деле, списочные, как правило, предпочтительнее более функциональных конструкций, таких как фильтр, уменьшить, лямбда и т.д. –
@Ivo : Обычно они предпочтительнее, потому что они обычно более четкие и часто более сжатые. Однако в этом случае версия 'filter' совершенно понятна и имеет гораздо меньше шума. – sepp2k