跟老齐学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多线程扫描端口示例
Jan 16 Python
Python Web框架Tornado运行和部署
Oct 19 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 Python
使用python实现对元素的长截图功能
Nov 14 Python
python抓取多种类型的页面方法实例
Nov 20 Python
Python3查找列表中重复元素的个数的3种方法详解
Feb 13 Python
Python实现ATM系统
Feb 17 Python
树莓派4B安装Tensorflow的方法步骤
Jul 16 Python
python3 re返回形式总结
Nov 20 Python
Python基于百度API识别并提取图片中文字
Jun 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学习笔记(三)操作符与控制结构
2011/08/06 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php加密算法之实现可逆加密算法和解密分享
2014/01/21 PHP
PHP引用(&amp;)各种使用方法实例详解
2014/03/20 PHP
简单介绍PHP非阻塞模式
2016/03/03 PHP
PHP多种序列化/反序列化的方法详解
2017/06/23 PHP
浅谈laravel框架sql中groupBy之后排序的问题
2019/10/17 PHP
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
Jquery 滑入滑出效果实现代码
2010/03/27 Javascript
读jQuery之四(优雅的迭代)
2011/06/20 Javascript
jQuery使用之设置元素样式用法实例
2015/01/19 Javascript
基于jQuery实现收缩展开功能
2016/03/18 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
jquery.masonry瀑布流效果
2017/05/25 jQuery
详细讲解vue2+vuex+axios
2017/05/27 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
Angular4学习笔记之实现绑定和分包
2017/08/01 Javascript
AngularJS 的$timeout服务示例代码
2017/09/21 Javascript
Node中使用ES6语法的基础教程
2018/01/05 Javascript
简单的Vue SSR的示例代码
2018/01/12 Javascript
结合Vue控制字符和字节的显示个数的示例
2018/05/17 Javascript
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
python控制台英汉汉英电子词典
2020/04/23 Python
Python显示进度条的方法
2014/09/20 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
python 日志增量抓取实现方法
2018/04/28 Python
Python玩转Excel的读写改实例
2019/02/22 Python
Python @property使用方法解析
2019/09/17 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
真正了解CSS3背景下的@font face规则
2017/05/04 HTML / CSS
Zavvi美国:英国娱乐之家
2017/03/19 全球购物
高中生活自我鉴定
2014/01/18 职场文书
个人委托书格式
2014/04/04 职场文书
周年庆典答谢词
2015/01/20 职场文书
Redis中key的过期删除策略和内存淘汰机制
2022/04/12 Redis