跟老齐学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 图片验证码代码分享
Jul 04 Python
Pyhthon中使用compileall模块编译源文件为pyc文件
Apr 28 Python
Python 序列的方法总结
Oct 18 Python
Python实现注册登录系统
Aug 08 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
更改Python的pip install 默认安装依赖路径方法详解
Oct 27 Python
Django的models中on_delete参数详解
Jul 16 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
基于python判断字符串括号是否闭合{}[]()
Sep 21 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 Python
OpenCV-Python实现轮廓的特征值
Jun 09 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
SONY SRF-40W电路分析
2021/03/02 无线电
php全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
PHP随机生成中文段落示例【测试网站内容时使用】
2020/04/26 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
NodeJS如何实现同步的方法示例
2018/08/24 NodeJs
Vue项目中最新用到的一些实用小技巧
2018/11/06 Javascript
小程序分享模块超级详解(推荐)
2019/04/10 Javascript
如何在Vue中抽离接口配置文件
2019/10/31 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
Vue 列表页带参数进详情页的操作(router-link)
2020/11/13 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[51:28]EG vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/16 DOTA
Python linecache.getline()读取文件中特定一行的脚本
2008/09/06 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
机器学习python实战之决策树
2017/11/01 Python
Python搜索引擎实现原理和方法
2017/11/27 Python
Python基础教程之内置函数locals()和globals()用法分析
2018/03/16 Python
Python最小二乘法矩阵
2019/01/02 Python
Django配置MySQL数据库的完整步骤
2019/09/07 Python
Selenium 滚动页面至元素可见的方法
2020/03/18 Python
Python生成器传参数及返回值原理解析
2020/07/22 Python
车间操作工岗位职责
2013/12/19 职场文书
护理专业自我鉴定
2014/01/30 职场文书
社区安全检查制度
2014/02/03 职场文书
公益广告标语
2014/06/19 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
幼儿园中班班级总结
2015/08/10 职场文书
NodeJs使用webpack打包项目的方法详解
2022/02/28 NodeJs