Поскольку вы знали, как обернуть результат вызова в filter
с помощью list()
, я предполагаю, что вы знакомы с концепцией функций генератора и тому подобным. Функция filter
на самом деле возвращает нечто похожее на функцию генератора в том смысле, что ее можно повторить только один раз. См. Ниже:
>>> a = filter(lambda x: x^1, [1,2])
>>> type(a)
<class 'filter'>
>>> it = iter(a)
>>> next(it)
2
>>> next(it)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> it = iter(a) # try to iterate the filter a second time
>>> next(it) # you will get a StopIteration exception the very first time
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>>
Приведенный выше код по существу эквивалентен:
a = filter(lambda x: x^1, [1,2])
print(type(a))
for item in a:
print(item)
for item in a:
print(item)