如何知道python中生成器中的可迭代次数

时间:2013-03-06 22:45:43

标签: python generator yield

我有以下代码

>>> 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中的iterables的数量。

2 个答案:

答案 0 :(得分:3)

你做不到。迭代器可以是无限的。

def test_yield():
    count = 1
    while True:
        count += 1
        yield count

答案 1 :(得分:2)

如果您知道您的迭代器不是无限的(请参阅@ unutbu的答案),您可以先将结果放入列表中,然后获取长度:

stuff = list(test_yield(x))
print(len(stuff))