1. ホーム
  2. python-3.x

[解決済み] Pythonで "filter "オブジェクトの長さを求める方法

2022-02-01 09:15:35

質問

>>> n = [1,2,3,4]

>>> filter(lambda x:x>3,n)
<filter object at 0x0000000002FDBBA8>

>>> len(filter(lambda x:x>3,n))
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    len(filter(lambda x:x>3,n))
TypeError: object of type 'filter' has no len()

取得したリストの長さを取得することができませんでした。そこで、このように変数に保存してみました...

>>> l = filter(lambda x:x>3,n)
>>> len(l)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    len(l)
TypeError: object of type 'filter' has no len()

ループを使うのではなく、これの長さを取得する方法はないでしょうか?

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

何らかの方法でフィルタオブジェクトを反復処理する必要があります。一つの方法は、リストに変換することです。

l = list(filter(lambda x: x > 3, n))

len(l)  # <--

しかし、それでは filter() というのも、リスト内包を使えばもっと簡単にできるからです。

l = [x for x in n if x > 3]

もう一度 len(l) は長さを返します。