嵌套for循环范围()

时间:2018-02-07 10:25:22

标签: 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
..

为什么范围会以这种方式表现?

2 个答案:

答案 0 :(得分:3)

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

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

这告诉我们的问题不在于问题不在于break每个人说出内循环,而是range在你循环时没有耗尽。发生这种情况是因为range 不是迭代器,因此每次都会重新启动,而不是从停止的地方开始。

答案 1 :(得分:2)

for j in x:
        print(">> %d" % j)
        break

您正在打破J的循环,导致J的值重置并且每次都返回到0。