2016-12-27 4 views
1

一つは、私は、彼らが異なることが唯一の方法はfはそうではないgは、メモリが不足する可能性がありますということであると考えてい機能イテレータによる歩留まりの数を数えますか?

def f(iterator): 
    count = 0 
    for _ in iterator: 
     count += 1 
    return count 

def g(iterator): 
    return len(tuple(iterator)) 

を考慮することができます。
私はそのことについて権利だと仮定すると:

tuple(iterator)より少ないメモリを使用しながらf(iterator)を取得するための迅速かつ/またはそれ以外の場合は、より良い(コードゴルフになることなく大体、短い) 方法が占めるあり、好ましくはインラインで を関数としてではなく、

(異なることfgためのいくつかの他の方法があれば、私は fが正しく、私が後だ機能を定義するgよりも可能性があると信じている。 私はすでにthe itertools documentation pageを見て、そこにどんな解決策が表示されていない)

答えて

4

あなたはイテレータ内のすべての項目の1を得ジェネレータ式でsumを使用することができます。

>>> it = (i for i in range(4)) 
>>> sum(1 for _ in it) 
4 
関連する問題