python推导式多行书写_python三种推导式的详细介绍及其应用示例,强调字典推导的重要性...

前言

列表推导式构建列表的快捷方式,而生成器表达式则可以用来创建其他任何类型的序列。自python2.7以后,列表推导和生成器表达式的概念就应用到了字典上,所以就有了字典推导,以后我们还会遇到集合推导(此处暂不讨论)。因此,如果想要更好的学习字典推导,需要对列表推导和生成器表达式进行充分对掌握。

为什么使用推导式,推导式的应用让代码的可读性更强。接下来,我们就一同来验证为什么说“可读性更强”。

1.列表推导

示例1:把letter字符串变成Unicode码位的列表

In [1]: letter='abcdefghr'

In [2]: codes=[]

In [3]: for letter in letter:

...: codes.append(ord(letter))

...:

In [4]: codes

Out[4]: [97, 98, 99, 100, 101, 102, 103, 104, 114]

示例2:把letter字符串变成Unicode码位的列表的另外一个写法(即列表推导)

In [1]: letter='abcdefghr'

In [2]: codes=[ord(letter) for letter in letter]

In [3]: codes

Out[3]: [97, 98, 99, 100, 101, 102, 103, 104, 114]

如上两个示例,最终达到的效果是一致的。但是明显可以看出,示例2的可读性更强。大家可能会问,是不是以后就使用列表推导不再使用for循环来呢?其实不然。通常的原则是,只用列表推导来创建新的列表,并且尽量保持简短。如果列表推导的代码超过了两行,可能就要考虑是不是要用for循环重写了。实际上,没有硬性规则要求什么时候用什么,或者必须用什么,如何用怎么用,还是需要自己把握。

2.生成器表达式

与列表推导相比,生成器表达式是初始化元组、数组或其他序列类型的更好选择。原因是生成器表达式遵守了迭代器协议,它是逐个的产出元素,而不是构造完整列表后,把列表传递到函数里。生成器表达式与列表推导的语法差不多,不同的是列表推导使用方括号,而生成器表达式使用的是圆括号。

示例1:使用生成器表达式初始化元组和数组

#初始化元组

In [1]: letter='abcdefghr'

In [2]: tuple=tuple(ord(letter) for letter in letter)

In [3]: tuple

Out[3]: (97, 98, 99, 100, 101, 102, 103, 104, 114)

#初始化数组

In [4]: import array

In [5]: array.array('I',(ord(letter) for letter in letter))

Out[5]: array('I', [97, 98, 99, 100, 101, 102, 103, 104, 114])

如果生成器表达式是函数调用的唯一参数,则不需要再加另外一个圆括号。

array的构造方法有两个参数,第一个参数确定了数字的存储方式。与初始化元组不同,该处有两个参数,所以生成器表达式需要用圆括号括起来。

3.字典推导

字典推导可以从任何以键值对作为元素的可迭代对象中构建出字典。

下面例子就展示了利用字典推导可以把一个装满元组的列表编程两个不同的字典。

创建一个包含成对数据的data_name列表,它将直接用在后续字典的构造方法中,具体如下:

In [1]: data_name=[(1561,'祁俊超'),(1560,'邓亚鑫'),(1559,'黎荣梅'),(1557,'卢雪'),

(1556,'武晓蒙'),(1555,'黄国全'),(1554,'黎荣梅'),(1551,'姚文通'),

(1550,'曾丹丹'),(1548,'武晓蒙')]

In [2]: data_name

Out[2]:

[(1561, '祁俊超'),

(1560, '邓亚鑫'),

(1559, '黎荣梅'),

(1557, '卢雪'),

(1556, '武晓蒙'),

(1555, '黄国全'),

(1554, '黎荣梅'),

(1551, '姚文通'),

(1550, '曾丹丹'),

(1548, '武晓蒙')]

更改data_name列表中数据对的左右位置,姓名为键,编号为值。具体如下:

In [3]: name_code={name:code for code,name in data_name}

In [4]: name_code

Out[4]:

{'祁俊超': 1561,

'邓亚鑫': 1560,

'黎荣梅': 1554,

'卢雪': 1557,

'武晓蒙': 1548,

'黄国全': 1555,

'姚文通': 1551,

'曾丹丹': 1550}

同上面的操作相反,用编号为键,姓名为值,并且过滤掉编号大于或等于1560的姓名。具体如下:

In [5]: {code:name for name,code in name_code.items() if code>=1560}

Out[5]: {1561: '祁俊超', 1560: '邓亚鑫'}

如果对列表推导对概念以及书写方式已熟知,那么理解字典推导相对容易些。如果对列表推导还不熟知,那么现在应该是掌握它导时候了,因为字典推导导表达形式在其他数据类型中慢慢得以体现。同时,使用列表推导和字典推导可以实现对数据的过滤效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558133.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux watch命令使用介绍

文章目录1.命令格式2.命令功能3.命令参数4.示例1:每隔一秒高亮显示网络链接数的变化情况2:每隔一秒高亮显示http链接数的变化情况3:实时查看模拟攻击客户机建立起来的连接数4:监测当…

php7 setcookie无效_php COOKIE介绍和setcookie有时会在ie下失效问题

建立商业站点或者功能比较完善的个人站点,常常需要记录访问者的信息,在PHP中提供了两种方便的手段:session和cookie功能.为了永久的保持用户信息,则cookie是最便捷的手段.在这里我将为大家详细的讲解cookie的功能及使用方法.一: 设置cookie使…

Linux at命令使用介绍

目录1.命令格式2.命令功能3.命令参数4.示例1:三天后的下午 5 点执行 /bin/ls2:明天17点钟,输出时间到指定文件3:计划任务设定后,在没有执行之前,用atq命令来查…

arm ubuntu 编译boost_使用yocto工具编译qt5.9.6总结

运行平台:OKMX6DL-C编译平台:Ubuntu 14.04.6 LTS编译工具:arm-poky-linux-gnueabi-gcc(gcc version 5.3.0 (GCC) )qt源码:qt-everywhere-opensource-src-5.9.6.tar.xz参考:嵌入式开发之Qt-5.9.6…

Linux crond命令使用介绍

目录前言一、crond简介系统任务调度用户任务调度二、crond服务三、crontab命令详解1.命令格式2.命令功能3.命令参数4.常用方法1). 创建一个新的crontab文件2). 列出crontab文件3). 编辑crontab文件4). 删除crontab文件5). 恢复丢失…

Android App屏幕旋转要点

文章目录前言屏幕旋转“预热”android:screenOrientationandroid:configChangesAcitvity onConfigurationChanged(newConfig: Configuration?)代码控制方向跟随系统重力感应总结前言 关于app横竖全屏切换,大多数属于音视频播放类app,电子书、文档类的应…

HTML静态页面获取url参数和UserAgent

目录前言原因解决1、静态页面获取url的参数2、取useragent的值3、测试页面前言 接技术支持小伙伴信:有用户反馈app在华为设备上下载不了,以为是服务器覆盖的范围不够或服务器挂了,直到另一个客服同事发来一个录屏,基本知道原因&a…

python mad函数_Python函数的基本定义

老男孩教育的PYTHON自动化开发课程自2013年第1期到现在已经走到了第12期,2年半的时间里,我们每一期都在对课程细节进行不同程度的优化,课程总时长也从最开始的2个月延长至第12期的五到六月,更新内容足足翻了一倍多,我们…

Linux grep命令使用介绍

目录1.命令格式2.命令功能3.命令参数4.正(规)则表达式5.示例1:查找指定进程2:查找指定进程个数3:从文件中读取关键词进行搜索4:从文件中读取关键词…

Android手机或平板设置浏览器的UserAgent

目录前言修改UserAgent实操华为手机自带浏览器Chrome(谷歌浏览器)QQ浏览器UC浏览器360浏览器前言 移动互联网盛行的当下,网页在电脑端和移动设备(包括手机,平板以及一些基于Android系统定制的设备)的适配主…

android jni fork()子进程不运行_Android高级面试谈谈Zygote的理解

Zygoto的作用Zygoto的作用有两个:1. 启动SystemServer2. 孵化应用进程SystemServer也是通过Zygoto来启动的,因为SystemServer需要Zygoto初始化好的一些系统资源,包括常用的类、JNI函数、共享库等等,这些资源直接从Zygoto继承过来对…

送给女朋友的情话

风拂鹊桥霓裳起 与卿漫话风雨里 初识 那一年端午 带着无比喜悦与期待 搭上去福州的火车 那一年端午 从福州到泉州 再到柴塔 连地名都好有神秘的感觉 迷糊的眼镜和疲倦的神情,刚好匹配得上 从此有了我们的传说 到了2022的七月七,还是一如既往 小特效 图…

Linux chmod命令使用介绍

目录1. 命令格式2. 命令功能3. 命令参数必要参数选择参数权限代号4. 使用实例1:增加文件所有用户组可执行权限2:同时修改不同用户权限3:去除文件的权限4:使用“”设置权限5:对一个目录及其子目录所有文件添加权限其他一…

lazada发货_Lazada发货用什么物流?费用要多少?

有买家到Lazada店铺下单之后,卖家就要安排订单发货了。Lazada发货的管控也是比较严格的,各位卖家要及时发货。小编也遇到不少新手卖家的咨询,问Lazada发货方式有哪些?以及发货流程是怎样的?下面针对这些问题&#xff0…

iOS app中不能跳转到商店更新

文章目录问题:跳转没有反应延申说明问题:跳转没有反应 如果app在苹果商店中的访问地址中带有中文,直接使用带中文url是跳转不成功的,需要对这个带中文的url进行UrlEncode编码才能正常跳转。 本文仅针对这种情况,或许还…

导入表格只有一行 帆软_万万没想到!把x个表格合合合合成一份,10分钟就搞定...

正值年中,老板交代把上半年各个地区提交的数据表格做个汇总。怎么办?一个地区一张表打开华南区的表,复制】-打开汇总表-【粘贴】再打开华北区的表【复制】-打开汇总表-【粘贴】……类似的工作任务还真不少各个单位上交的报名表各部门的生产计…

ddrelease64 黑苹果_High Sierra 黑苹果构建 微星X99A GAMING PRO CARBON+i7 6800k+GTX1070

回复文章须知:在本站评论区回复文章的时候,请务必正确填写好你的【电子邮件】地址,正确的填写【电子邮件】你将可以在博主/其他本站网友回复你的时候会收到邮件通知,以便及时查看回复内容!本教程仅供小白安装使用&…

macOS/iOS WKWebview 下载文件

WKWebview 下载文件需要通过JS注入的方式来下载。js下载的数据是base64编码的,回到给原生后,原生需要反编码后才是原始文件的数据。 具体步骤: 配置WKWebview的js回调句柄(标识)创建WKWebview并添加到视图上实现WKScr…

vim插件自动补齐_给VIM添加REPL

REPL: 读取-求值-输出”循环(英语:Read-Eval-Print Loop,简称REPL)是一个简单的,交互式的编程环境。python作为一个动态语言,REPL在开发过程中起到了很大的作用。可是一直以来用vim写python没有一个很好的&…

Linux ping 详细介绍(win也适用)

多数情况下,能否访问某台电脑或服务器,很自然的使用ping xxx.xxx.xxx.xxx,这是最简单的ping形式,同时看到ping几个包之后就停止(windows)了,linux 会一直ping下去,直到按ctrlc或其他组合键。在windows平台或linux平台&…