2010-09-04 4 views

ответ

57
filter(r.match, list) 
+0

На самом деле, списочные, как правило, предпочтительнее более функциональных конструкций, таких как фильтр, уменьшить, лямбда и т.д. –

+22

@Ivo : Обычно они предпочтительнее, потому что они обычно более четкие и часто более сжатые. Однако в этом случае версия 'filter' совершенно понятна и имеет гораздо меньше шума. – sepp2k

32

Полное Пример:

import re 
mylist = ["dog", "cat", "wildcat", "thundercat", "cow", "hooo"] 
r = re.compile(".*cat") 
newlist = filter(r.match, mylist) 
print str(newlist) 

Печать:

['cat', 'wildcat', 'thundercat'] 
+3

Привет, Когда я запускаю приведенный выше код, я получаю '<объект фильтра в 0x1057acda0>' Что я делаю неправильно? – Joshua

+1

В соответствии с документами python (python 2.7.12): https://docs.python.org/2/library/functions.html#filter фильтр возвращает список, а не объект. Вы также можете проверить этот код: https://repl.it/X3G/5786 (просто нажмите пробег) – Mercury

+1

Спасибо. Я использую Python 3.5.2 на Mac. Я попробовал вашу ссылку. Конечно, он работает, хотя и не уверен, почему я получаю этот msg. Я даже удалил 'str', так как' filter' возвращает список в любом случае, безрезультатно ... – Joshua

Смежные вопросы