Python は、つまり、積極的な反復可能オブジェクトの長さを取得するための優れたメソッドを提供しますlen(x)
。しかし、ジェネレータの内包表記と関数によって表される遅延反復可能オブジェクトについては、同様のものを見つけることができませんでした。もちろん、次のように記述するのは難しくありません。
def iterlen(x):
n = 0
try:
while True:
next(x)
n += 1
except StopIteration: pass
return n
しかし、自転車を再現しているような感覚は拭えません。
(関数を入力しているときに、ある考えが頭に浮かびました。引数を「破壊」するので、そのような関数は実際には存在しないのかもしれません。ただし、私のケースでは問題ではありません)。
PS: 最初の回答に関してですが、はい、次のようなものlen(list(x))
も機能しますが、メモリの使用量が大幅に増加します。
PPS: 再確認しました... PS は無視してください。試しているときにミスをしたようですが、問題なく動作します。ご迷惑をおかけして申し訳ありません。
ベストアンサー1
最も簡単な方法は、おそらくsum(1 for _ in gen)
gen がジェネレーターであることです。