Python 嵌套的循环范围()

Python 嵌套的循环范围(),python,python-3.x,Python,Python 3.x,对于以下代码: x = range(10) for i in x: print(i) for j in x: print(">> %d" % j) break 我本以为结果是: 0 >> 1 2 >> 3 .. 但事实是: 0 >> 0 1 >> 0 2 >> 0 .. 为什么range会有这种行为 for j in x: print(">>

对于以下代码:

x = range(10)
for i in x:
    print(i)
    for j in x:
        print(">> %d" % j)
        break
我本以为结果是:

0 
>> 1
2
>> 3
..
但事实是:

0
>> 0
1
>> 0
2
>> 0
..
为什么range会有这种行为

for j in x:
        print(">> %d" % j)
        break
您正在中断J的循环,导致J的值每次重置并返回0。

通过将x转换为an,您可以实现预期的行为

x = iter(range(10))

for i in x:
    print(i)
    for j in x:
        print('> {}'.format(j))
        break
返回

0
> 1
2
> 3
4
> 5
6
> 7
8
> 9

这向我们表明,问题不在于每次循环时内部循环的中断,而在于循环时射程没有耗尽。发生这种情况的原因是range不是迭代器,因此它每次都重新启动,而不是从它停止的地方重新启动。

您正在打破内部循环,因此j每次从0开始o,假设range是iterable,但不是迭代器,这是否意味着每个for循环都会隐式地从中创建一个迭代器;不能对范围对象调用next。“这只是一个很简单的例子。”卢米索塔看看这个。这是一本好书。