很多情况下,我们会重复做同一件有规律的事情,我们会利用 for 来解决类似这种机械性的事情。
操作系统:window7 x64
编程IDE:Pycharm 2016.1.2
Python版本:3.6.1
编辑时间:2017年4月30日
版权所有:OE, 转载请注明出处:http://blog.csdn.net/csnd_ayo
英文原文
The for statement is used to iterate over the elements of a sequence (such as a string, tuple or list) or other iterable object
中文翻译
for语句用于遍历序列的元素(如一个字符串,元组或列表)或其他可以迭代的对象
示例代码
list = [1,2,3,4,5]
# for 迭代器 in 列表:
for x in list:
print(x, end=',')
输出内容
1,2,3,4,5,
结论
利用for循环可以对列表进行逐个访问, 每次向列表中取出一个元素,拷贝给迭代器。
for循环有个计数器
示例代码
list = [1, 2, 3, 4, 5]
for x in list:
list.pop(0)
print(x, end= " : ")
print(list)
输出内容
1 : [2, 3, 4, 5]
3 : [3, 4, 5]
5 : [4, 5]
逻辑描述
循环取列表中的每个元素,
第一次循环:
取第一个元素(值:1)
弹出(pop) 下标为0的元素(值:1)
打印:1 : [2, 3, 4, 5]
第二次循环:
取第二个元素(值:3)
弹出(pop) 下标为0的元素(值:2)
打印:3 : [3, 4, 5]
第三次循环:
取第三个元素(值:5)
弹出(pop) 下标为0的元素(值:3)
打印:5 : [4, 5]
总结
每次弹出首个元素, x
还是会正常取到 n + 1 位置的元素值,说明 for 循环中有一个隐藏的计数器,来记录当前读到第几个元素了。
是拷贝不是元素本身
示例代码
list = [1,2,3,4,5]
for x in list:
list.pop(0)
print(" old: ", end=str(x))
x = 1
print(" new: ", end=str(x))
print(" new list: ", end=str(list))
print()
输出内容
old: 1 new: 1 new list: [2, 3, 4, 5]
old: 3 new: 1 new list: [3, 4, 5]
old: 5 new: 1 new list: [4, 5]
总结
每次修改元素 x
列表本身并没有修改,说明 x
不是元素本身,而是元素的拷贝。
如何修改列表本身
示例代码 1
list = [1,2,3,4,5]
for x in range(len(list)):
print(list, end=' : ')
print(list[x])
list.pop(0)
输出错误:因为他并不是迭代器,他是访问元素本身,因为list在每次循环时,都弹出元素,当list访问到不存在的下标元素时,发生了错误。
示例代码 2
list = [1, 2, 3, 4, 5]
for x in range(len(list)):
print(list, end=' : ')
list[x] = 1
print(list[x])
输出内容
[1, 2, 3, 4, 5] : 1
[1, 2, 3, 4, 5] : 1
[1, 1, 3, 4, 5] : 1
[1, 1, 1, 4, 5] : 1
[1, 1, 1, 1, 5] : 1
从代码中可以看出,这是一个典型的迭代器,他具备计数功能。
每一次for循环,他的计数器都会加 1,若访问到了下个元素,则拷贝其值到迭代器 x 中,
若访问不到下个元素,则退出当前循环。
[文章] for 循环中的 else 语句 前往