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'

我如何从生成器中知道可迭代的长度(在这种情况下是列表的长度)。在我的真实情况下,我没有确切的清单。我从发电机那里得到。简单地说,我想知道在我的第二个 var.next() 左右之后 var 中的可迭代数。

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 回答