跟老齐学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 条件判断的缩写方法
Sep 06 Python
python文件的md5加密方法
Apr 06 Python
python版本坑:md5例子(python2与python3中md5区别)
Jun 20 Python
在python中利用最小二乘拟合二次抛物线函数的方法
Dec 29 Python
Python中那些 Pythonic的写法详解
Jul 02 Python
python pyinstaller打包exe报错的解决方法
Nov 02 Python
Tensorflow训练模型越来越慢的2种解决方案
Feb 07 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 Python
Python opencv缺陷检测的实现及问题解决
Apr 24 Python
教你用Python爬取英雄联盟皮肤原画
Jun 13 Python
Python制作表白爱心合集
Jan 22 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水印技术
2007/02/14 PHP
PHP实时显示输出
2008/10/02 PHP
关于php curl获取301或302转向的网址问题的解决方法
2011/06/02 PHP
基于PHP常用字符串的总结(待续)
2013/06/07 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
jQuery 1.0.4 - New Wave Javascript(js源文件)
2007/01/15 Javascript
javascript 面向对象的JavaScript类
2010/05/04 Javascript
前台js对象在后台转化java对象的问题探讨
2013/12/20 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
jQuery 1.9.1源码分析系列(十四)之常用jQuery工具
2015/12/02 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
jquery html5 视频播放控制代码
2016/11/06 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
JavaScript设计模式之代理模式详解
2017/06/09 Javascript
Angularjs 事件指令详细整理
2017/07/27 Javascript
zTree 树插件实现全国五级地区点击后加载的示例
2018/02/05 Javascript
ExtJs使用自定义插件动态保存表头配置(隐藏或显示)
2018/09/25 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
Vue学习之组件用法实例详解
2020/01/06 Javascript
webpack 动态批量加载文件的实现方法
2020/03/19 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Pytorch Tensor 输出为txt和mat格式方式
2020/01/03 Python
python异常处理try except过程解析
2020/02/03 Python
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
电脑销售顾问自荐信
2014/01/29 职场文书
淘宝中秋节活动方案
2014/01/31 职场文书
书香校园活动方案
2014/02/28 职场文书
兴趣小组活动总结
2014/05/05 职场文书
公司任命书模板
2014/06/06 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL