1

次のコードがあります

>>> x = ['a','b','c','d','e']
>>> def test_yield(lst):
...     for el in lst:
...        yield el
... 
>>> var = test_yield(x)
>>> var.next()
'a'
>>> var.next()
'b'
>>> var.next()
'c'
>>> var.next()
'd'
>>> var.next()
'e'

ジェネレーターからイテラブルの長さ (この場合はリストの長さ) を知る方法を教えてください。私の実際のケースでは、正確なリストはありません。私は発電機からそれを持っています。簡単に言えば、2 番目の var.next() などの後の var の iterable の数を知りたいのです。

4

2 に答える 2

3

それはいけません。イテレータは無限にすることができます。

def test_yield():
    count = 1
    while True:
        count += 1
        yield count
于 2013-03-06T22:47:36.710 に答える
2

イテレータが無限ではないことがわかっている場合 (@unutbu の回答を参照)、最初に結果をリストに入れてから長さを取得できます。

stuff = list(test_yield(x))
print(len(stuff))
于 2013-03-06T22:50:20.830 に答える