您的位置:首页 > 编程语言 > Python开发

[python笔记]for循环中循环变量迭代问题

2017-11-01 15:17 387 查看

[python笔记]for循环中循环变量迭代问题

在python中,for循环相当于一个迭代器(Iterator),在循环体中改变循环变量的值对循环次数是没有影响的。

迭代器在一个独立的线程中工作,并且拥有一个mutex锁。迭代器被创建的时候,建立了一个内存索引表(单链表),这个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错误。就是说迭代器在工作的时候,是不允许被迭代的对象被改变的。

举个例子,i从0到10循环,j取i+1到10,如果i+j大于5,则i跳到当前的j,并进行后面的循环(不知道怎么描述才对,看不明白就直接看代码吧/(ㄒoㄒ)/~~)。用for循环写就是:

print("when we use 'for':")
for i in range(10):
print('i:',i)
for j in range(i+1,10):
print('\tj=',j)
if i+j<5:
j=j+1
continue
else:
i=j
break


运行结果:

when we use 'for':
i: 0
j= 1
j= 2
j= 3
j= 4
j= 5
i: 1
j= 2
j= 3
j= 4
i: 2
j= 3
i: 3
j= 4
i: 4
j= 5
i: 5
j= 6
i: 6
j= 7
i: 7
j= 8
i: 8
j= 9
i: 9


从运行结果可以看出,i并没有变动。

List、Set等是动态的、可变对象数量的数据结构,但是迭代器是单向不可变、只能顺序读取、不能逆序操作的数据结构,当迭代器指向的原始数据发生变化时,迭代器自己就迷失了方向。因此,我们可以改用while循环:

print("\nwhen we use 'while':")
i=0
while i < 10:
print('i:',i)
j=i+1
while j < 10:
print('\tj=',j)
if i+j<5:
j=j+1
continue
else:
i=j
break
i=i+1


运行结果:

when we use 'while':
i: 0
j= 1
j= 2
j= 3
j= 4
j= 5
i: 6
j= 7
i: 8
j= 9


此时就得到了我们想要的效果。

需要注意的是,while循环的运行效率比for循环低,所以会花费较多的时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 迭代