生成列表:
要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):
>>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:
>>> L = [] >>> for x in range(1, 11): ... L.append(x * x) ... >>> L [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成 list。
复杂表达式:
使用for循环的迭代不仅可以迭代普通的list,还可以迭代dict。
假设有如下的dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格:
tds = ['<tr><td>%s</td><td>%s</td></tr>' % (name, score) for name, score in d.iteritems()] print '<table>' print '<tr><th>Name</th><th>Score</th><tr>' print '\n'.join(tds) print '</table>'
注:字符串可以通过 % 进行格式化,用指定的参数替代%s。字符串的join()方法可以把一个 list 拼接成一个字符串。
把打印出来的结果保存为一个html文件,就可以在浏览器中看到效果了:
<table border="1"> <tr><th>Name</th><th>Score</th><tr> <tr><td>Lisa</td><td>85</td></tr> <tr><td>Adam</td><td>95</td></tr> <tr><td>Bart</td><td>59</td></tr> </table>
条件过滤:
列表生成式的 for 循环后面还可以加上 if 判断。例如:
>>> [x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100]
有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
1. isinstance(x, str) 可以判断变量 x 是否是字符串;
2. 字符串的 upper() 方法可以返回大写的字母。
多层表达式:
for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。
对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:
>>> [m + n for m in 'ABC' for n in '123'] ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
翻译成循环代码就像下面这样:
L = [] for m in 'ABC': for n in '123': L.append(m + n)
运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:
>>> import os # 导入os模块,模块的概念后面讲到
>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']
相关推荐
主要介绍了浅谈Python中列表生成式和生成器的区别,是Python入门学习中的基础知识,需要的朋友可以参考下
本文主要介绍Python中列表生成式的基本知识和使用 生成列表 要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11): >>> range(1, 11) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 但如果要生成[1×1, 2×2...
一本针对所有层次的Python 读者而...第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D 游戏开发如何利用数据生成交互式的信息图,以及创建和定制简单的Web 应用,并帮读者解决常见编程问题和困惑。
列表生成式 生成器 函数式编程 高阶函数 匿名函数 装饰器 偏函数 模块 使用模块 安装第三方模块 使用__future__ 面向对象编程 类和实例 访问限制 继承和多态 获取对象信息 面向对象高级编程 使用__slots__ 使用@...
课程简介: 第一课 入门基础 Python简介 为什么选择Python 环境搭建 如何学好编程 常用关键字 ...第5课 文件访问与函数式编程入门 第6课 高级面向对象 第7课 并发编程以及系统常用模块 第8课 常用第三方模块
5-1列表生成式 5-2迭代器 5-3生成器 5-4装饰器 5-5Python编程规范 6-1模块名称空间和导入 6-2模块的执行 6-3os和sys模块介绍和使用 6-4第三方模块的安装 7-1类与面向对象设计OOP 7-2多态、继承和封装 7-3类装饰器 8-...
15.11.3 函数式、模板驱动 263 15.12 lxml简介 263 15.13 元素类 263 15.14 使用lxml解析 266 15.15 本章小结 267 15.16 习题 267 第16章 网络编程 269 16.1 理解协议 271 16.1.1 比较协议和程序语言 271 16.1.2 ...
1.生成器推导式是继列表推导式后的有一中python推导式,他比列表推导式速度更快,占用的内存也更少。 2.使用生成器对象时,可以根据需要将他转化为列表或者元组,也可以是哟个生成器对像__next__()方法或内置函数...
list 生成式(列表生成式) 生成器 迭代器和生成器综合例子 面向对象 面向对象的概念 类的定义和调用 类方法 修改和增加类属性 类和对象 初始化函数 类的继承 类的多态 类的访问控制 模块与包 Python 模块简介 模块...
三个项目,包括简单的 Python 2D 游戏开发,如何利用数据生成交互式的信息图,以及创建和定制简单的 Web 应用,并帮读者解决常见编程问题和困惑。 本书适合对 Python 感兴趣的任何层次的读者阅读。 本书旨在让你尽快...
可迭代对象&列表生成式&生成器3.mp4 │ 千锋Python教程:48.斐波拉契数列&迭代器.mp4 │ 千锋Python教程:49.杨辉三角&偏函数&模块概述1.mp4 │ 千锋Python教程:50.杨辉三角&偏函数&模块概述2.mp4 │ ├─千锋...
python入门到高级全栈工程师培训视频学习资料;本资料仅用于学习,请查看后24小时之内删除。 【课程内容】 第1章 01 计算机发展史 02 计算机系统 03 小结 04 数据的概念 05 进制转换 06 原码补码反码 07 物理层和...
使用列表推导式(List Comprehensions)简化创建和处理列表的操作。 通过enumerate()同时迭代索引和值。 使用zip()合并或同时遍历多个序列。 从列表中同时提取多个元素赋值给多个变量,例如:a, b, c = my_list[:3]...
本书是享誉全球的Python入门书,影响了超过250万读者。全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括强大的Python库和工具,以及列表、字典、if语句、类、文件和异常、代码测试等内容;第二...
三个项目,包括简单的 Python 2D 游戏开发,如何利用数据生成交互式的信息图,以及创建和定制简单的 Web 应用,并帮读者解决常见编程问题和困惑。 本书适合对 Python 感兴趣的任何层次的读者阅读。
三个项目,包括简单的Python 2D 游戏开发,如何利用数据生成交互式的信息图,以及创建和定制简单的 Web 应用,并帮读者解决常见编程问题和困惑。 本书适合对Python 感兴趣的任何层次的读者阅读。
文章目录Python 入门基础进阶迭代器&生成器前引python中for循环的机制迭代器和可迭代协议可迭代协议迭代器协议方法1方法2方法3为什么要使用for循环生成器Python中提供的生成器:生成器Generator:生成器函数生成器的...
本书是一本针对所有层次的Python ...第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的Python 2D 游戏开发如何利用数据生成交互式的信息图,以及创建和定制简单的Web 应用,并帮读者解决常见编程问题和困惑。