1. ホーム
  2. python

[解決済み] ジェネレータ/イテレータのアイテムの数を数える最短の方法は何ですか?

2023-06-05 04:40:06

質問

もし私が要素そのものを気にせずに反復処理可能なアイテムの数が欲しいなら、それを得るためのpythonicな方法は何でしょうか?今、私は次のように定義します。

def ilen(it):
    return sum(itertools.imap(lambda _: 1, it))    # or just map in Python 3

というのはわかるのですが lambda は有害とみなされるに近いものであり lambda _: 1 は確かにきれいではありません。

(このユースケースは、正規表現にマッチするテキストファイルの行数を数えること、つまり grep -c .)

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

呼び出し先 itertools.imap() をPython 2で、あるいは map() は、同等のジェネレータ式に置き換えることができます。

sum(1 for dummy in it)

これも遅延ジェネレータを使用しているので、メモリ上の全てのイテレータ要素の完全なリストを実体化することを回避しています。