跟老齐学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实现的百度站长自动URL提交小工具
Jun 27 Python
Python 模板引擎的注入问题分析
Jan 01 Python
python中实现指定时间调用函数示例代码
Sep 08 Python
Python3之文件读写操作的实例讲解
Jan 23 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
python实现最大子序和(分治+动态规划)
Jul 05 Python
Python操作Mongodb数据库的方法小结
Sep 10 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
Python urllib2运行过程原理解析
Jun 04 Python
Python控制台输出俄罗斯方块的方法实例
Apr 17 Python
python中pandas对多列进行分组统计的实现
Jun 18 Python
分享python函数常见关键字
Apr 26 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常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php mail to 配置详解
2014/01/16 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
ThinkPHP3.1新特性之动态设置自动完成及自动验证示例代码
2014/06/23 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
PHP is_array() 检测变量是否是数组的实现方法
2016/06/13 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
什么是PHP文件?如何打开PHP文件?
2017/06/27 PHP
PHP数字金额转换成中文大写显示
2019/01/05 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
javascript实现的动态文字变换
2007/07/28 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
jQuery实现模仿微博下拉滚动条加载数据效果
2015/12/25 Javascript
jQuery 3.0十大新特性最终版发布
2016/07/14 Javascript
js实现精确到毫秒的倒计时效果
2016/08/05 Javascript
自动化测试读写64位操作系统的注册表
2016/08/15 Javascript
Vue.js实战之使用Vuex + axios发送请求详解
2017/04/04 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
webpack学习教程之publicPath路径问题详解
2017/06/17 Javascript
Vue组件和Route的生命周期实例详解
2018/02/10 Javascript
Vue CLI3搭建的项目中路径相关问题的解决
2018/09/17 Javascript
layui 地区三级联动 form select 渲染的实例
2019/09/27 Javascript
vue改变循环遍历后的数据实例
2019/11/07 Javascript
Angular短信模板校验代码
2020/09/23 Javascript
深入理解NumPy简明教程---数组2
2016/12/17 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
python中有关时间日期格式转换问题
2019/12/25 Python
将数据集制作成VOC数据集格式的实例
2020/02/17 Python
python GUI库图形界面开发之PyQt5窗口背景与不规则窗口实例
2020/02/25 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
Python内置函数及功能简介汇总
2020/10/13 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
HMV日本官网:全球知名的音乐、DVD和电脑游戏零售巨头
2016/08/13 全球购物
C#里面如何判断一个Object是否是某种类型(如Boolean)?
2016/02/10 面试题
幼儿园教师自荐书
2015/03/06 职场文书
返乡农民工证明
2015/06/24 职场文书