跟老齐学Python之for循环语句


Posted in Python onOctober 02, 2014

废话少说,上干活。

for的基本操作

for是用来循环的,是从某个对象那里依次将元素读取出来。看下面的例子,将已经学习过的数据对象用for循环一下,看看哪些能够使用,哪些不能使用。同时也是复习一下过往的内容。

>>> name_str = "qiwsir"

>>> for i in name_str:  #可以对str使用for循环

...     print i,

...                     

q i w s i r
>>> name_list = list(name_str)

>>> name_list

['q', 'i', 'w', 's', 'i', 'r']

>>> for i in name_list:     #对list也能用

...     print i,

... 

q i w s i r
>>> name_set = set(name_str)    #set还可以用

>>> name_set

set(['q', 'i', 's', 'r', 'w'])

>>> for i in name_set:

...     print i,

... 

q i s r w
>>> name_tuple = tuple(name_str)

>>> name_tuple

('q', 'i', 'w', 's', 'i', 'r')

>>> for i in name_tuple:        #tuple也能呀

...     print i,

... 

q i w s i r
>>> name_dict={"name":"qiwsir","lang":"python","website":"qiwsir.github.io"}

>>> for i in name_dict:             #dict也不例外

...     print i,"-->",name_dict[i]

... 

lang --> python

website --> qiwsir.github.io

name --> qiwsir

除了上面的数据类型之外,对文件也能够用for,这在前面有专门的《不要红头文件》两篇文章讲解有关如何用for来读取文件对象的内容。看官若忘记了,可去浏览。

for在list解析中,用途也不可小觑,这在讲解list解析的时候,业已说明,不过,还是再复习一下为好,所谓学而时常复习之,不亦哈哈乎。

>>> one = range(1,9)         

>>> one

[1, 2, 3, 4, 5, 6, 7, 8]

>>> [ x for x in one if x%2==0 ]

[2, 4, 6, 8]

什么也不说了,list解析的强悍,在以后的学习中会越来越体会到的,佩服佩服呀。

列位如果用python3,会发现字典解析、元组解析也是奇妙的呀。

要上升一个档次,就得进行概括。将上面所说的for循环,概括一下,就是下图所示:

请输入图片描述

用一个文字表述:

for iterating_var in sequence:

    statements

iterating_var是对象sequence的迭代变量,也就是sequence必须是一个能够有某种序列的对象,特别注意没某种序列,就是说能够按照一定的脚标获取元素。当然,文件对象属于序列,我们没有用脚标去获取每行,如果把它读取出来,因为也是一个str,所以依然可以用脚标读取其内容。

zip

zip是什么东西?在交互模式下用help(zip),得到官方文档是:

zip(...)
zip(seq1 [, seq2 [...]]) -> [(seq1[0], seq2[0] ...), (...)]
Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence.
通过实验来理解上面的文档:

>>> a = "qiwsir"

>>> b = "github"

>>> zip(a,b)

[('q', 'g'), ('i', 'i'), ('w', 't'), ('s', 'h'), ('i', 'u'), ('r', 'b')]

>>> c = [1,2,3]

>>> d = [9,8,7,6]

>>> zip(c,d)

[(1, 9), (2, 8), (3, 7)]

>>> e = (1,2,3)

>>> f = (9,8)

>>> zip(e,f)

[(1, 9), (2, 8)]
>>> m = {"name","lang"}  

>>> n = {"qiwsir","python"}

>>> zip(m,n)

[('lang', 'python'), ('name', 'qiwsir')]

>>> s = {"name":"qiwsir"}

>>> t = {"lang":"python"}

>>> zip(s,t)

[('name', 'lang')]

zip是一个内置函数,它的参数必须是某种序列数据类型,如果是字典,那么键视为序列。然后将序列对应的元素依次组成元组,做为一个list的元素。

下面是比较特殊的情况,参数是一个序列数据的时候,生成的结果样子:

>>> a  

'qiwsir'

>>> c  

[1, 2, 3]

>>> zip(c)

[(1,), (2,), (3,)]

>>> zip(a)

[('q',), ('i',), ('w',), ('s',), ('i',), ('r',)]

这个函数和for连用,就是实现了:

>>> c

[1, 2, 3]

>>> d

[9, 8, 7, 6]

>>> for x,y in zip(c,d):    #实现一对一对地打印

...     print x,y

... 

1 9

2 8

3 7

>>> for x,y in zip(c,d):    #把两个list中的对应量上下相加。

...     print x+y

... 

10

10

10

上面这个相加的功能,如果不用zip,还可以这么写:

>>> length = len(c) if len(c)<len(d) else len(d)    #判断c,d的长度,将短的长度拿出来

>>> for i in range(length):

...     print c[i]+d[i]

... 

10

10

10

以上两种写法那个更好呢?前者?后者?哈哈。我看差不多了。还可以这么做呢:

>>> [ x+y for x,y in zip(c,d) ]

[10, 10, 10]

前面多次说了,list解析强悍呀。当然,还可以这样的:

>>> [ c[i]+d[i] for i in range(length) ]

[10, 10, 10]

for循环语句在后面还会经常用到,其实前面已经用了很多了。所以,看官应该不感到太陌生。
Python 相关文章推荐
利用python生成一个导出数据库的bat脚本文件的方法
Dec 30 Python
Python 模板引擎的注入问题分析
Jan 01 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
正确理解Python中if __name__ == '__main__'
Jan 24 Python
django多对多表的创建,级联删除及手动创建第三张表
Jul 25 Python
用Cython加速Python到“起飞”(推荐)
Aug 01 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
Oct 11 Python
python实现上传文件到linux指定目录的方法
Jan 03 Python
Python单例模式的四种创建方式实例解析
Mar 04 Python
Python OpenCV中的numpy与图像类型转换操作
Dec 11 Python
python中str内置函数用法总结
Dec 27 Python
跟老齐学Python之用while来循环
Oct 02 #Python
跟老齐学Python之复习if语句
Oct 02 #Python
python中pycurl库的用法实例
Sep 30 #Python
python采用getopt解析命令行输入参数实例
Sep 30 #Python
Python实现115网盘自动下载的方法
Sep 30 #Python
python打开网页和暂停实例
Sep 30 #Python
Python解析网页源代码中的115网盘链接实例
Sep 30 #Python
You might like
聊天室php&amp;mysql(六)
2006/10/09 PHP
比较全面的PHP数组的使用方法小结
2010/09/23 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
PHP内存使用情况如何获取
2015/10/10 PHP
php+ajax无刷新分页实例详解
2015/12/07 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
jquery ajax 登录验证实现代码
2009/09/23 Javascript
Javascript调用函数方法的几种方式介绍
2015/03/20 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
jQuery固定元素插件scrolltofixed使用指南
2015/04/21 Javascript
Svg.js实例教程及使用手册详解(一)
2016/05/16 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
Spring Boot/VUE中路由传递参数的实现代码
2018/03/02 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
React 全自动数据表格组件——BodeGrid的实现思路
2019/06/12 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
在vue和element-ui的table中实现分页复选功能
2019/12/04 Javascript
解决Mint-ui 框架Popup和Datetime Picker组件滚动穿透的问题
2020/11/04 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
编写Python脚本把sqlAlchemy对象转换成dict的教程
2015/05/29 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python实现图片筛选程序
2018/10/24 Python
关于python3中setup.py小概念解析
2019/08/22 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
软件工程师面试题
2012/06/25 面试题
工商学院毕业生个人自我评价
2013/09/19 职场文书
公司会议策划方案
2014/05/17 职场文书
增员口号大全
2014/06/18 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
体检通知范文
2015/04/21 职场文书
二婚主持词
2015/06/30 职场文书
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS