1. ホーム
  2. python

[解決済み] フィルタを呼び出すと、<filter object at ...>が返されます。> [重複] を返す。

2022-08-21 10:06:16

質問

Pythonでfilterの概念を学んでいます。このような簡単なコードを実行しています。

>>> def f(x): return x % 2 != 0 and x % 3 != 0
>>> filter(f, range(2, 25))

しかし、リストを得る代わりに、私はこのようないくつかのメッセージを取得しています。

<filter object at 0x00FDC550>

これは何を意味するのでしょうか?私のフィルタリングされたオブジェクト、つまり出てくるリストがそのメモリ位置に格納されているということでしょうか?どのようにすれば、必要なリストを取得できるのでしょうか?

どのように解決するのですか?

python3.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で