跟老齐学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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
python操作CouchDB的方法
Oct 08 Python
低版本中Python除法运算小技巧
Apr 05 Python
python距离测量的方法
Mar 06 Python
python3利用Socket实现通信的方法示例
May 06 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
python 字符串常用方法汇总详解
Sep 16 Python
调用其他python脚本文件里面的类和方法过程解析
Nov 15 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 Python
Python如何使用input函数获取输入
Aug 06 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 Python
Python加密与解密模块hashlib与hmac
Jun 05 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遍历目录输出目录及其下的所有文件示例
2014/01/27 PHP
YII实现分页的方法
2014/07/09 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
php生成无限栏目树
2017/03/16 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
js特殊字符过滤的示例代码
2014/03/05 Javascript
js停止冒泡和阻止浏览器默认行为的简单方法
2016/05/15 Javascript
一个极为简单的requirejs实现方法
2016/10/20 Javascript
JavaScript实现数组降维详解
2017/01/05 Javascript
详解使用angular-cli发布i18n多国语言Angular应用
2017/05/20 Javascript
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
2017/09/29 NodeJs
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
koa2服务端使用jwt进行鉴权及路由权限分发的流程分析
2019/07/22 Javascript
[15:15]教你分分钟做大人:狙击手
2014/10/30 DOTA
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
python 基本数据类型占用内存空间大小的实例
2018/06/12 Python
感知器基础原理及python实现过程详解
2019/09/30 Python
python实现企业微信定时发送文本消息的示例代码
2020/11/24 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
解决pytorch 数据类型报错的问题
2021/03/03 Python
怎样从/向数据文件读/写结构
2014/11/23 面试题
Vector, ArrayList, HashTable, HashMap哪些是线程安全的,哪些不是
2015/10/12 面试题
土地转让协议书范本
2014/04/15 职场文书
《大禹治水》教学反思
2014/04/27 职场文书
学校安全教育月活动总结
2014/07/07 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
详解Django的MVT设计模式
2021/04/29 Python
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
使用 Apache Dubbo 实现远程通信(微服务架构)
2022/02/12 Servers
Mysql分析设计表主键为何不用uuid
2022/03/31 MySQL
nginx.conf配置文件结构小结
2022/04/08 Servers
古见同学有交流障碍症 第二季宣传CM公开播出
2022/04/11 日漫