如何在python中知道生成器中的iterables数

如何在python中知道生成器中的iterables数,python,generator,yield,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' >&

我有以下代码

>>> 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'
如何从生成器中知道iterables的长度(在本例中是列表的长度)。
在我的真实案例中,我没有确切的清单。我从发电机上拿到的。简单地说,我想知道在我的第二个var.next()之后,var中的iterables的数量。

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

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

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

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

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

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

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

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

如果我变成一个列表,那么首先使用生成器是没有意义的,对吗?当列表很大时,最好通过生成器获取它们,因为它们占用的空间不大memory@user1988876这基本上是正确的,但函数编写器可能不知道如何使用它们的数据,因此通常最好从函数返回迭代器,并在必要时让它们的调用者转换为列表。如果我转换为列表,那么一开始就没有使用发电机的目的,对吗?当列表很大时,最好通过生成器获取它们,因为它们占用的空间不大memory@user1988876这基本上是正确的,但是函数编写器可能不知道如何使用它们的数据,因此从函数返回迭代器通常是一种好的做法,如果需要的话,让他们的呼叫者转换成一个列表。在将呼叫者添加到集合中时,你不能保持一个运行计数吗?我想知道还有多少要添加到集合中,我应该知道我开始时的长度,然后在添加时有一个计数器,会有帮助的。你能在将它们添加到集合中时保持一个连续计数吗?我想知道还有多少要添加到集合中,我应该知道我开始时的长度,然后在添加它们时使用一个计数器会很有帮助。它们也可以是这样,计算它们的长度的唯一方法是完全枚举它们,即使它们是有限的。它们也可以是这样,计算它们的长度的唯一方法是完全枚举它们,即使它们是有限的。