跟老齐学Python之再深点,更懂list


Posted in Python onSeptember 20, 2014

list解析

先看下面的例子,这个例子是想得到1到9的每个整数的平方,并且将结果放在list中打印出来

>>> power2 = []
>>> for i in range(1,10):
...   power2.append(i*i)
... 
>>> power2
[1, 4, 9, 16, 25, 36, 49, 64, 81]

python有一个非常有意思的功能,就是list解析,就是这样的:

>>> squares = [x**2 for x in range(1,10)]
>>> squares
[1, 4, 9, 16, 25, 36, 49, 64, 81]

看到这个结果,看官还不惊叹吗?这就是python,追求简洁优雅的python!

其官方文档中有这样一段描述,道出了list解析的真谛:

List comprehensions provide a concise way to create lists. Common applications are to make new lists where each element is the result of some operations applied to each member of another sequence or iterable, or to create a subsequence of those elements that satisfy a certain condition.

还记得前面一讲中的那个问题吗?

找出100以内的能够被3整除的正整数。
我们用的方法是:

aliquot = []

for n in range(1,100):
  if n%3 == 0:
    aliquot.append(n)

print aliquot

好了。现在用list解析重写,会是这样的:

>>> aliquot = [n for n in range(1,100) if n%3==0]
>>> aliquot
[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99]

震撼了。绝对牛X!

其实,不仅仅对数字组成的list,所有的都可以如此操作。请在平复了激动的心之后,默默地看下面的代码,感悟一下list解析的魅力。

>>> mybag = [' glass',' apple','green leaf ']  #有的前面有空格,有的后面有空格
>>> [one.strip() for one in mybag]       #去掉元素前后的空格
['glass', 'apple', 'green leaf']
enumerate

这是一个有意思的内置函数,本来我们可以通过for i in range(len(list))的方式得到一个list的每个元素编号,然后在用list[i]的方式得到该元素。如果要同时得到元素编号和元素怎么办?就是这样了:

>>> for i in range(len(week)):
...   print week[i]+' is '+str(i)   #注意,i是int类型,如果和前面的用+连接,必须是str类型
... 
monday is 0
sunday is 1
friday is 2

python中提供了一个内置函数enumerate,能够实现类似的功能

>>> for (i,day) in enumerate(week):
...   print day+' is '+str(i)
... 
monday is 0
sunday is 1
friday is 2

算是一个有意思的内置函数了,主要是提供一个简单快捷的方法。

官方文档是这么说的:

Return an enumerate object. sequence must be a sequence, an iterator, or some other object which supports iteration. The next() method of the iterator returned by enumerate() returns a tuple containing a count (from start which defaults to 0) and the values obtained from iterating over sequence:

顺便抄录几个例子,供看官欣赏,最好实验一下。
>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

在这里有类似(0,'Spring')这样的东西,这是另外一种数据类型,待后面详解。

Python 相关文章推荐
python数据结构之二叉树的统计与转换实例
Apr 29 Python
centos系统升级python 2.7.3
Jul 03 Python
操作Windows注册表的简单的Python程序制作教程
Apr 07 Python
Python之批量创建文件的实例讲解
May 10 Python
python实现逐个读取txt字符并修改
Dec 24 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 Python
python操作excel让工作自动化
Aug 09 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
Tensorflow 多线程设置方式
Feb 06 Python
matlab中imadjust函数的作用及应用举例
Feb 27 Python
浅析Python 条件控制语句
Jul 15 Python
python3实现Dijkstra算法最短路径的实现
May 12 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 #Python
跟老齐学Python之list和str比较
Sep 20 #Python
Python显示进度条的方法
Sep 20 #Python
python中对list去重的多种方法
Sep 18 #Python
Python中用Descriptor实现类级属性(Property)详解
Sep 18 #Python
Python中的闭包总结
Sep 18 #Python
python的即时标记项目练习笔记
Sep 18 #Python
You might like
2020年4月新番动漫目录 官方宣布4月播出的作品一览
2020/03/08 日漫
使PHP自定义函数返回多个值
2006/11/26 PHP
isset和empty的区别
2007/01/15 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
php简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
PHP序列化的四种实现方法与横向对比
2018/11/29 PHP
js 判断图片是否加载完以及实现图片的预下载
2014/08/14 Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
2014/09/04 Javascript
Js数组排序函数sort()介绍
2015/06/08 Javascript
JavaScript Canvas绘制圆形时钟效果
2020/08/20 Javascript
JavaScript实现提交模式窗口后刷新父窗口数据的方法
2017/06/16 Javascript
微信JSAPI Ticket接口签名详解
2020/06/28 Javascript
jquery实现倒计时小应用
2017/09/19 jQuery
vue的状态管理模式vuex
2017/11/30 Javascript
JavaScript中的惰性载入函数及优势
2020/02/18 Javascript
JavaScript中的函数式编程详解
2020/08/22 Javascript
js实现弹幕墙效果
2020/12/10 Javascript
tornado捕获和处理404错误的方法
2014/02/26 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
Python中生成Epoch的方法
2017/04/26 Python
tensorflow: 查看 tensor详细数值方法
2018/06/13 Python
python 使用shutil复制图片的例子
2019/12/13 Python
快速查找Python安装路径方法
2020/02/06 Python
将keras的h5模型转换为tensorflow的pb模型操作
2020/05/25 Python
python将字典内容写入json文件的实例代码
2020/08/12 Python
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
如何写出高性能的JSP和Servlet
2013/01/22 面试题
英语专业毕业生自荐信
2013/10/28 职场文书
计算机应用职专应届生求职信
2013/11/12 职场文书
生日赠语
2015/06/23 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
《司马光》教学反思
2016/02/22 职场文书
MySQL系列之三 基础篇
2021/07/02 MySQL
Python利用FlashText算法实现替换字符串
2022/03/31 Python