下面我们来全方位的介绍for循环的详细用法:
for循环与while相比更加通用,他是一个通用的序列迭代工具,可以遍历任何有序的序列对象内的元素。例如之前介绍过的:字符串、列表、元组等,以及其他一些内置的可以用来迭代的对象(到时候专门展开)。
回顾几个例子,列表、字符串、元组的遍历
for x in [1,2,3,4]:
print(x, end=' ')
1 2 3 4
for x in 'hello':
print(x, end=' ')
h e l l o
for x in ('i', 'am', 'a', 'teacher'):
print(x,end=' ')
i am a teacher
T = [(1, 2), (3, 4), (5, 6)]
for (a, b) in T:
print(a,b)
1 2
3 4
5 6
这里再单独说说另外两种特殊的内置类型对象,一个是字典、一个是文件。
字典的遍历
字典的遍历这里单独说说,相比于上面几个序列类型,字典的特殊之处在于他内部的对象不是有序的。
但是他也能通过for循环来遍历,常见的是通过值来遍历,还有一种是通过键值对的元组来遍历
D = {'a':1, 'b':2, 'c':3}
for key in D:
print(key, '--->', D[key])
b ---> 2
c ---> 3
a ---> 1
D = {'a': 1, 'b': 2, 'c': 3}
for (key, value) in D.items():
print(key, '--->', value)
a ---> 1
c ---> 3
b ---> 2
文件的遍历
因为文件保存了很多字符和行,因此也是循环常见的典型使用案例,最原始的方法可以调用文件对象的read方法,把文件内容一次性加载至字符串对象
file = open('myfile.txt', 'r')
print(file.read())
hello text file
goodbyt text file
Hahahahah
那么如果想逐行读取文本文件呢?for循环是最易于编写及执行最快的选择,这里有两种方法,
for line in open('myfile.txt','r').readlines():
print(line, end='')
for line in open('myfile.txt','r'):
print(line, end='')
hello text file
goodbyt text file
Hahahahah
这两种方法的运行结果是一样的,表面差别不大,但实际上有很大的区别:
第一种方法通过readlines方法,会首先一次性把文件载入到行字符串列表中,然后再对这个字符串列表进行迭代;
而第二种方法运行的原理则有所不同,他并非一次性将全部的文件内容载入到内存中,而是在迭代的时候,循环到了哪一行才将哪一行读入到内存。这里涉及到一个新的概念----迭代器(open函数返回的那个就是文件迭代器),后面再着重系统介绍。
现在我们只需要知道,第二种方法是文本文件读取的最佳选择,它简单、且对任意大小的文件都有效,因为他不会一次性把整个文件都载入到内存中,相反第一种方法存在内存压力过大的问题。