• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > python生成器表达式和列表解析

python生成器表达式和列表解析

作者:hebedich 字体:[增加 减小] 来源:互联网

hebedich 通过本文主要向大家介绍了python 生成器表达式,python 列表表达式,python 正则表达式,python lambda表达式,python正则表达式教程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

绝大多数情况下,遍历一个集合都是为了对元素应用某个动作或是进行筛选。如果看过本文的第二部分,你应该还记得有内建函数map和filter提供了这些功能,但Python仍然为这些操作提供了语言级的支持。

(x+1 for x in lst) #生成器表达式,返回迭代器。外部的括号可在用于参数时省略。 
[x+1 for x in lst] #列表解析,返回list
</div>

如你所见,生成器表达式和列表解析(注:这里的翻译有很多种,比如列表展开、列表推导等等,指的是同一个意思)的区别很小,所以人们提到这个特性时,简单起见往往只描述成列表解析。然而由于返回迭代器时,并不是在一开始就计算所有的元素,这样能得到更多的灵活性并且可以避开很多不必要的计算,所以除非你明确希望返回列表,否则应该始终使用生成器表达式。接下来的文字里我就不区分这两种形式了:)

你也可以为列表解析提供if子句进行筛选:

(x+1 for x in lst if x!=0)
</div>

或者提供多条for子句进行嵌套循环,嵌套次序就是for子句的顺序:

((x, y) for x in range(3) for y in range(x))
</div>

列表解析就是鲜明的Pythonic。我常遇到两个使用列表解析的问题,本应归属于最佳实践,但这两个问题非常典型,所以不妨在这里提一下:

第一个问题是,因为对元素应用的动作太复杂,不能用一个表达式写出来,所以不使用列表解析。这是典型的思想没有转变的例子,如果我们将动作封装成函数,那不就是一个表达式了么?

第二个问题是,因为if子句里的条件需要计算,同时结果也需要进行同样的计算,不希望计算两遍,就像这样:

(x.doSomething() for x in lst if x.doSomething()>0)
</div>

这样写确实很糟糕,但组合一下列表解析即可解决:

(x for x in (y.doSomething() for y in lst) if x>0)
</div>

内部的列表解析变量其实也可以用x,但为清晰起见我们改成了y。或者更清楚的,可以写成两个表达式:

tmp = (x.doSomething() for x in lst)
(x for x in tmp if x > 0)
</div>

列表解析可以替代绝大多数需要用到map和filter的场合,可能正因为此,著名的静态检查工具pylint将map和filter的使用列为了警告。

</div>

您可能想查找下面的文章:

  • python生成器表达式和列表解析
  • python生成器表达式和列表解析

相关文章

  • 安装Python的web.py框架并从hello world开始编程
  • python实现根据用户输入从电影网站获取影片信息的方法
  • python实现在sqlite动态创建表的方法
  • python实现dict版图遍历示例
  • python检查URL是否正常访问的小技巧
  • 使用Python中的cookielib模拟登录网站
  • Python使用scrapy采集数据时为每个请求随机分配user-agent的方法
  • python 生成不重复的随机数的代码
  • python实现字典(dict)和字符串(string)的相互转换方法
  • 详解JavaScript编程中的window与window.screen对象

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • 用Python编写一个基于终端的实现翻译的脚本
    • Python的shutil模块中文件的复制操作函数详解
    • python字典的常用操作方法小结
    • 在Python编程过程中用单元测试法调试代码的介绍
    • Python中operator模块的操作符使用示例总结
    • 在Python中使用mongoengine操作MongoDB教程
    • Python使用PDFMiner解析PDF代码实例
    • Python的Asyncore异步Socket模块及实现端口转发的例子
    • Python对list列表结构中的值进行去重的方法总结
    • Python字符串处理之count()方法的使用

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有