Ответ 1
Похоже, вы используете python 3.x. В python3, filter
, map
, zip
и т.д. Возвращают объект, который является итерируемым, но не списком. Другими словами,
filter(func,data) #python 2.x
эквивалентно:
list(filter(func,data)) #python 3.x
Я думаю, что он был изменен, потому что вы (часто) хотите сделать фильтрацию в ленивом смысле. Вам не нужно потреблять всю память для создания списка спереди, если итератор возвращает то же самое вещь будет во время итерации.
Если вы знакомы с выражениями в списках и выражениями генератора, указанный выше фильтр теперь (почти) эквивалентен следующему в python3.x:
( x for x in data if func(x) )
В отличие от:
[ x for x in data if func(x) ]
в python 2.x