Wywołanie zwrotu filtra [duplikat]
Uczę się pojęcia filtrów w Pythonie. Używam takiego prostego kodu.
>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))
Ale zamiast dostać listę, dostaję jakąś wiadomość taką jak ta.
<filter object at 0x00FDC550>
Co to znaczy? Czy to znaczy, że moja filtrowana lista obiektów, która ma wyjść, jest przechowywana w tym miejscu pamięci? Jak uzyskać listę, której potrzebuję? 2 answers
Wygląda na to, że używasz Pythona 3.x. w python3, filter
, map
, zip
, etc zwraca obiekt, który można iterować, ale nie listę. Innymi słowy,
filter(func,data) #python 2.x
Jest równoważne:
list(filter(func,data)) #python 3.x
Myślę, że została zmieniona, ponieważ (często) chcesz filtrować w leniwym sensie-nie musisz zużywać całej pamięci, aby utworzyć listę z przodu, o ile iterator zwróci to samo, co lista podczas iteracji.
Jeśli znasz listę wyrażenia złożone i generatorowe, powyższy filtr jest teraz (prawie) równoważny poniższemu w python3.x:
( x for x in data if func(x) )
W przeciwieństwie do:
[ x for x in data if func(x) ]
W Pythonie 2.x
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 13:37:24
Jest to iterator zwracany przez funkcjęfilter .
Jeśli chcesz listę, po prostu zrób
list(filter(f, range(2, 25)))
Niemniej jednak, możesz po prostu iterować nad tym obiektem za pomocą pętli for
.
for e in filter(f, range(2, 25)):
do_stuff(e)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-07 13:26:27