Python 如何在生成器上迭代?

Python 如何在生成器上迭代?,python,iterator,generator,Python,Iterator,Generator,假设有一个大的列表,我想对它进行迭代 >>> x=[] >>> for i in x: print(x) 但由于列表太大,使用生成器是最好的方法: >>> g=(i for i in range(10)) >>> g.__next__() 0 但是迭代的次数有问题。 因为我不知道我应该使用多少次g.\uu next\uu(),所以我需要一些更动态的东西 例如: for i in x: x作为循环的循环,从迭代到结束有多

假设有一个大的列表,我想对它进行迭代

>>> x=[]
>>> for i in x:
print(x)
但由于列表太大,使用生成器是最好的方法:

>>> g=(i for i in range(10))
>>> g.__next__()
0
但是迭代的次数有问题。 因为我不知道我应该使用多少次
g.\uu next\uu()
,所以我需要一些更动态的东西

例如:

for i in x:
x作为循环的循环,从迭代到结束有多长并不重要


如何使用生成器进行类似的迭代?

使用for循环,就像您在列表示例中使用的那样-

for i in g:
    print(i)

您可以对生成器使用
for
语法:

>>> g=(i for i in range(10))
>>> g
<generator object <genexpr> at 0x7fd70d42b0f0>
>>> for i in g:
...     print i
... 
0
1
2
3
4
5
6
7
8
9
>g=(范围(10)内的i代表i)
>>>g
>>>对于i in g:
...     打印i
... 
0
1.
2.
3.
4.
5.
6.
7.
8.
9

如果用于循环,它是否具有generators属性?我的意思是优化CPU和RAM的使用?是的,在内存方面,它不会创建额外的列表之类的。它只调用next()函数并对其进行迭代,然后再次调用next()并对其进行迭代,依此类推。不确定优化生成器的CPU是什么意思?如果用于循环,它是否具有生成器属性?我的意思是优化CPU和RAM的使用?@ZeroDays,如果你;如果问生成器是否只在需要时生成值(而不是预先生成),答案是肯定的。