查看原文
其他

给妹子讲python-S01E12循环迭代初体验

给妹子讲python Python爱好者社区 2019-04-07

作者:酱油哥/ 清华程序猿      
微信公众号: python数据科学家
知乎专栏: 《给妹子讲python》
https://zhuanlan.zhihu.com/c_147297848



前文传送门:

给妹子讲python-S01E01好用的列表

给妹子讲python-S01E02学会用字典

给妹子讲python-S01E03元组的使用

给妹子讲python-S01E04容器遍历和列表解析式

给妹子讲python-S01E05字符串的基本用法

给妹子讲python-S01E06字符串用法进阶

给妹子讲python-S01E07字符编码历史观:从ASCII到Unicode

给妹子讲python-S01E08理清python中的字符编码方法

给妹子讲python-S01E09文件操作小意思

给妹子讲python-S01E10动态类型与共享引用

给妹子讲python-S01E11赋值与对象拷贝


【要点抢先看】

1.for循环的用法范例 2.while循环的用法范例 3.字典和文件的迭代用法举例

循环是每个程序语言的最基本最重要的部分之一,这一部分我们来说说循环迭代这个话题。


【妹子说】这些我知道,循环就是for循环、while循环嘛。


不过python的循环使用更方便,涉及的技巧和用法也更值得好好聊聊。

这一小节主要来谈谈循环的基本用法,对,通过这一节你就能愉快的使用python中常见的循环用法了。


首先是while循环。


需要反复循环执行的部分(也就是循环主体)在顶端测试条件为真时会重复执行,直到测试条件变为假时退出。举个简单的例子一看就明白了,其中循环主体就是while后缩进的代码块。

a = 0
b = 10
while a < b:    print(a, end=' ')    a = a + 1

0 1 2 3 4 5 6 7 8 9

接着再介绍一下while循环中会用到的continue,break和else三个关键字


continue是跳出本轮循环,回到循环主体的顶部再次开始新的循环

a = 0 b = 10 while a < b:    a = a + 1    if a % 2 != 0:        continue    print(a, end=' ') 2 4 6 8 10

break是直接跳出循环

a = 0 b = 10 while a < b:    a = a + 1    if a == 5:        break    print(a, end=' ') 1 2 3 4

else关键字,只有当循环正常离开的时候才会执行,即没有碰到break语句

y = 33 x = y // 2 while x > 1:    if y % x  == 0:        print('{} has a factor {}'.format(y,x))        break    x = x - 1 else:    print('{} is prime'.format(y)) 33 has a factor 11

我们可以看出,如果y不是质数,就会执行到break语句,从而跳过else语句,不执行else语句


如果是一个质数,就不会运行到break语句,循环正常退出的话,就执行else语句

y = 29 x = y // 2 while x > 1:    if y % x  == 0:        print('{} has a factor {}'.format(y,x))        break    x = x - 1 else:    print('{} is prime'.format(y)) 29 is prime

我们再来看看for循环


for循环更加通用,他是一个通用的序列迭代工具,可以遍历任何有序的序列对象内的元素。例如之前介绍过的:字符串、列表、元组等,以及其他一些内置的可以用来迭代的对象(到时候专门展开)。


回顾几个例子,列表、字符串、元组的遍历

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函数返回的那个就是文件迭代器),后面再着重系统介绍。


现在我们只需要知道,第二种方法是文本文件读取的最佳选择,它简单、且对任意大小的文件都有效,因为他不会一次性把整个文件都载入到内存中,相反第一种方法存在内存压力过大的问题。


【妹子说】看来for比while循环容易编写,执行时也比较快。


所以每当你需要遍历序列时,都应该将其作为首选的工具,同时还应该熟练使用一些循环迭代的技巧来优化你的程序,下一小节我们说说三种循环迭代的常用技巧。

Python爱好者社区历史文章大合集

Python爱好者社区历史文章列表(每周append更新一次)

福利:文末扫码立刻关注公众号,“Python爱好者社区”,开始学习Python课程:

关注后在公众号内回复“课程”即可获取:

小编的Python入门免费视频课程!!!

【最新免费微课】小编的Python快速上手matplotlib可视化库!!!

崔老师爬虫实战案例免费学习视频。

陈老师数据分析报告制作免费学习视频。

玩转大数据分析!Spark2.X+Python 精华实战课程免费学习视频。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存