1. 列表推导式

推导式是最常应用迭代协议的环境之一。推导式是另外一种将for循环,if表达式以及赋值语句放在一个单一语句中的一种方法。

举个例子,我们需要将一个输入列表中所有偶数元素除以2生成一个新的序列,通过循环操作,或许可以这么写:

num = [3,6,8,23,17,12,15]
filter_and_divided=[]
for number in num:if number %2 ==0:filter_and_divided.append(number/2)
print(filter_and_divided)
>>[3.0, 4.0, 6.0]

通过简单的几行代码,两层嵌套循环通过append就可以实现。这事有效的,但可能不是python中优化的“最佳实践”。如果通过使用filter、lambda和filter函数,可能会使的代码更加简洁:

num = [3,6,8,23,17,12,15]
filter_and_divided=map(lambda x:x/2,filter(lambda x:x%2==0,num))
print(list(filter_and_divided))
>>[3.0, 4.0, 6.0]

一般来讲,map会带一个函数,以及一个或者多个的序列参数,然后从序列中去除的并行元素调用函数的结果收集起来。
filter内置函数,对于传入的函数返回True的可迭代对象中的每一项元素,都会返回该项元素。
由于map和filter都是内置方法,因此运行速度相对于for循环要快一些。

如何让代码结构更简洁一些呢?可以尝试使用一下列表推导式:

num = [3,6,8,23,17,12,15]
filter_and_divided=[x/2 for x in num if x%2 == 0]
print(filter_and_divided)

列表推导式通常包括如下及部分:
- 一个输入列表
- 一个标识输入列表成员的变量
- 一个可选的判断表达式
- 一个将输入序列中满足判断表达式的成员转化为预期输出的输出表达式

执行:
- 列表内容迭代器遍历输入列表num的每一个成员x
- 判断表达式判断每一个成员x是否为偶数
- 如果成员x为偶数,则输入到输出表达数中进行除2操作,最终作为输出列表中的元素

列表推导式使用一个输入迭代表达式,一个可选的判断表达式以及一个输出表达式,将所有操作封装到列表中。

显然通过列表表达式相对要简洁一些,但是对于多层嵌套的时候就会稍微有点晦涩。另外,列表推导式也存在一些不足,对于数据量较大的场景中,需要将所有的数据一次性都加在到内存中,当数据量足够大时就会导致系统的内存不足。

2. 生成器推导式

相对于列表推导式立即产生结果,内存消耗较大的现象。python提供一种延迟机制,即在使用的时候才产生结果的迭代器推导式,迭代器推导式并非立即返回输出结果,而是返回一个迭代器对象。一方面节省内存空间,另外一方面将执行的时间分散到每一次的结果请求中。

num = [3,6,8,23,17,12,15]
filter_and_divided=(x/2 for x in num if x%2 == 0)
print(type(filter_and_divided))
for data in filter_and_divided:print(data)
>> <class 'generator'>
>>3.0
>>4.0
>>6.0

从语法结构来看,列表推导式和生成器推导式的语法几乎一样,仅仅是列表表达式为”[]”,而生成器表达式为“()”。从执行结果来看,列表推导式直接返回了预期的结果,而生成器推导式为一个“generator ”对象,因此我们需要对”generator “进行遍历来获取结果。而每一次的遍历都是依次从num列表中取一个元素成员,在判断表达式中进行判断,对于满足条件的执行输出表达式,输入结果。

3. 总结

基于对python中的运行,map调用要比同等的for循环要快2倍,而列表推导式往往比map调用还要稍微快一些。这是由于map和推导式在解释器中以C语言的速度执行的,比在PVM中执行的for循环代码要快的多。

python之推导式相关推荐

  1. python中的字典推导式_17.python 字典推导式(经典代码)

    在昨天的文章中,我们介绍了关于** python列表推导式** 的使用,字典推导式使用方法其实也类似,也是通过循环和条件判断表达式配合使用,不同的是字典推导式返回值是一个字典,所以整个表达式需要写在{ ...

  2. Python 字典推导式 - Python零基础入门教程

    目录 一.Python 字典推导式简介 二.Python 字典推导式语法 三.Python 字典推导式实战 1.在字典中提取或者修改数据,返回新的字典 2.在字符串中提取数据,返回新的字典 四.重点总 ...

  3. Python 列表推导式 - Python零基础入门教程

    目录 一.Python 列表推导式简介 二.Python 列表推导式语法 三.Python 列表推导式练习 1.Python 列表推导式案例一 2.Python 列表推导式案例二 3.Python 列 ...

  4. Python 条件推导式 - Python零基础入门教程

    目录 一.Python 条件推导式简介 二.Python 条件推导式使用 1.Python 条件推导式语法 2.Python 条件推导式练习 三.猜你喜欢 零基础 Python 学习路线推荐 : Py ...

  5. python 列表推导式csv_Python 列表推导式

    在本教程中,我们将学习使用 Python 列表推导. Python 列表推导式 列表推导式是一种基于现有列表创建列表的语法结构. 列表推导式为创建列表提供了一种简洁的方法. 常见的要求是创建新列表,其 ...

  6. 【技能树共建】Python 列表推导式

    Python 列表推导式是什么 列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式, 它在 Python 中用于 转换 和 过滤 数据. 其语法格 ...

  7. Python生成器推导式

    Python 生成器推导式 趁刚总结的列表推导式还热乎,来看看生成器推导式. 有需要了解列表推导式的小伙伴可以去看之前我的总结Python列表推导式 一.列表推导式VS生成器推导式 1.从形式上看,生 ...

  8. python列表推导式是什么

    列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表. 它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句.那个表达式可以是任意的, ...

  9. python基础 推导式

    #三元操作符 i=1 if i==1:print('i==1') else:print('i!=1')i==1 r=True if 1==1 else False print(r) # 可以把pyth ...

  10. Python集合推导式

    [小白从小学Python.C.Java] [Python全国计算机等级考试] [Python数据分析考试必会题] ● 标题与摘要 Python集合推导式 ● 选择题 请问以下Python代码输出的结果 ...

最新文章

  1. 【Linux Deploy】一、Linux Deploy安装配置使用教程
  2. spark 随机森林算法案例实战
  3. sapmto生产模式配置及操作详解_硬岩制砂线怎么设计?300t/h的生产流程与设备配置详解...
  4. 无法生成“F:\system voiume information”下的常规文件夹列表拒绝访问
  5. 大牛写的Openstack虚拟机创建细节
  6. [转载] 字符串的startsWith和endWith方法
  7. 优化后亲测可用!免费下载QQ音乐大部分资源
  8. vijos一元三次方程求解
  9. Vue 开发环境搭建步骤
  10. 【每周一本书】之《解码者:艾伦·图灵传》:解码计算机之父、人工智能奠基者的谜样人生
  11. m3u8播放器 android,在android中播放m3u8视频
  12. 利用kali Linux进行中间人攻击
  13. 网站banner设计有什么好的方法
  14. 台式计算机连不上网怎么办,台式电脑插了网卡连不上网怎么办?几个方面介绍及解决方法...
  15. word无法自动修复计算机怎么办,电脑Word问题解决办法
  16. CAD制图软件中如何设置选择对象的显示效果?
  17. mybatis SQL打印插件
  18. C++有关类的基本函数总结
  19. WQ7033开发指南(基础篇)之1.0 开发环境搭建和编译
  20. Qt5与PyQt5UI设计界面出现控件文字显示不完全的问题

热门文章

  1. windows禁用f1按键
  2. C语言二维数组的初始化方法
  3. java多线程 wait和notify方法
  4. 当前主要的常用的PHP环境部署套件比较
  5. vue + 微信获取用户信息
  6. 小明的烦恼——找字符串
  7. 日暮下的东汉-外戚、宦官与党锢
  8. R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析
  9. MySql中的like和in走不走索引
  10. 目标检测 | 让YOLOv2告诉你Trick的力量