前言

python的生成式在一些类型相互转换的时候可以写出十分优雅的代码,如列表转换成另一个列表、字典、或元组,并且代码的执行效率也比使用for...in...循环高。

系列文章

列表生成式

列表生成式即生成列表的生成式,写法简单而优雅,可以将多行代码融合成一行。主要的作用是将其他对象转换成列表或对原来的列表进行过滤。

列表生成式的代码效率是高于多行循环结构的,原因是将原本多行代码融合一行,解释加快。

# 列表转换列表
ls = [1,2,4,6]
ls1 = [x**2 for x in ls]
print(ls1)
结果:[1,4,16,36]
# 也可以这样
list(x**2 for x in range(10)) # 对列表过滤,返回true的才会保留到列表
ls = [1,2,4,6]
ls1 = [x**2 for x in ls if x > 3]
print(ls1)
结果:[16, 36] # 多条件过滤
ls = [1,2,4,6]
ls1 = [x**2 if x > 2 else x**3 for x in ls]
print(ls1)
结果:[1, 8, 16, 36] # 多重循环
ls = [1,2,4,6]
ls1 = [x**y if x > 2 else x**3 for x in ls for y in ls]
print(ls1)
结果:[1, 1, 1, 1, 8, 8, 8, 8, 4, 16, 256, 4096, 6, 36, 1296, 46656]

生成器生成式

在涉及到需要遍历列表而不是针对列表的某个值操作时,使用生成器代替列表可以减少内存的消耗。

ls = [1,2,4,6]
ls1 = (x**2 for x in ls)
print(ls1)
结果:<generator object <genexpr> at 0x0000021B21DED150> # 当然我们也可以这样
def gener(l):
for x in l:
yield x**2
# 只不过定义结构偏重型,当操作复杂的时候才采用 # 通过for..in取数据不需要处理StopIteration
for i in ls1:
pass # next()方法需要处理StopIteration
while True:
try:
print(next(ls1))
except StopIteration:
pass

字典生成式

字典生成式在一些需要列表或元组转化成字典的场合可以写出很优雅的代码。

# dict()可以接受类似列表生成式的写法,前提是ls至少是二维可迭代对象,否则报错
ls = [('name1','xiao'),('name2','wang')]
dict_ls = dict(x for x in ls)
print(dict_ls)
结果:{'name1': 'xiao', 'name2': 'wang'} # 也可以针对zip使用
d = dict(zip([1,2],[3,4,]))
print(d)
# 结果
{1: 3, 2: 4} # 直接和列表生成式相似的写法
d = {x:y for x,y in enumerate(range(10))}

集合生成式

按照列表生成式类似的写法我们可以写集合生成式。

print(set(i for i in range(5)))
print({i for i in range(5)})
print(frozenset(i for i in range(5))) # 结果
{0, 1, 2, 3, 4}
{0, 1, 2, 3, 4}
frozenset({0, 1, 2, 3, 4})

元组生成式

由于()这个类似列表生成式的形式被生成器占用了,所有元组生成式使用tuple()来进行。


ls = [('name1',['1','2']),('name2','wang')]
dict_ls = tuple(x for x in ls)
print(dict_ls)
结果:(('name1', ['1', '2']), ('name2', 'wang'))

条件表达式代码压缩

对于一些如果代码不算长的if...else...的判断情况,可以将代码写在一行,显得非常的优雅。

x = 1 if 1>0 else None

参考

python之字典、列表、元组生成器的使用的更多相关文章

  1. python将字典列表导出为Excel文件的方法

    将如下的字典列表内容导出为Excel表格文件形式: ​ 关于上图字典列表的写入,请参考文章:https://blog.csdn.net/weixin_39082390/article/details/ ...

  2. python基础(五)列表,元组,集合

    列表 在python中是由数个有序的元素组成的数据结构,每一个元素对应一个index索引来隐式标注元素在列表中的位置.是python中最常用的一种数据类型.需要注意的是列表中可以有重复相同的数据. 列 ...

  3. python空字典列表两种生成方式对赋值带来的不同影响

    最近在实现朴素贝叶斯算法碰到一个很有趣的现象(基于Python3.6.3) 我生成一个由10个空字典构成的列表: 第一种生成方式(可能大多数人都会用这种方法,形式简单) >>a = [{} ...

  4. python学习之列表元组,字典

    list:元素性质可以不一致,元素还可以是list,可类似数组方法进行索引(也可以用负数索引,-1表示最后一个),可用.append('')进行动态增加,可用pop()删除最后一个或者pop(i)删除 ...

  5. Python初学笔记列表&元组&字典

    一.从键盘获取 1 print("请输入") 2 username = input("姓名:") 3 age = input("年龄:") ...

  6. python 序列结构-列表,元组,字典,字符串,集合

    列表 """ name_list.__add__( name_list.__getslice__( name_list.__new__( name_list.append ...

  7. python字符串字典列表互转

    #-*-coding:utf-8-*- #1.字典 dict = {'name': 'Zara', 'age': 7, 'class': 'First'} #字典转为字符串,返回:<type ' ...

  8. python之路(列表,元组)

    列表 list:基础数据类型之一,可以索引,切片,步长,切片+步长可以增删改查,可迭代,可嵌套字典,元组,列表 一.索引,切片,步长 list01 = [1,2,3,'eric','west'] 1. ...

  9. python记录_day04 列表 元组

    今日主要内容: 列表 和 元组 列表 一.列表介绍 列表是一种能存储大量数据的数据结构,是能装对象的对象.由方括号 [] 括起来,能放任意类型的数据,数据之间用逗号隔开 列表存储数据是有顺序的 二.增 ...

  10. python 学习分享-列表元组篇

    1 列表(list) 下面的代码就是把一个变量赋值为列表 a=['laay','aay','ay','y'] 列表中存在索引,可以通过索引来访问列表中的值,也可以通过索引完成切片 print(a[0] ...

随机推荐

  1. iOS开发支付集成之支付宝支付

    项目中要用到支付功能,需要支付宝,微信,银联三大支付,所以打算总结一下,写两篇文章,方便以后的查阅, 大家在做的时候也能稍微参考下,用到的地方避免再次被坑.这是第二篇支付宝集成,第一篇银联支付在这里. ...

  2. 从驱动层分析android的Binder机制-android学习之旅(83)

    前言及知识准备 Binder驱动程序 Service组件的注册和启动 Clinet应用获取服务 本次主要介绍Android平台下Binder进程间机制.从机制的组成出发,将按照Binder驱动程序.B ...

  3. Leetcode_80_Remove Duplicates from Sorted Array II

    本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/43835055 Follow up for "Re ...

  4. 我所犯的JavaScript引用错误

    近期在w3cschool学习JavaScript和php--学完后,开始帮一哥们友情写网站.但是在使用ajax和Jquery的时候发现,我自己写的脚本不能运行.捣鼓了半天,没有发现任何语句错误.调试器 ...

  5. CentOS 7 运行级别的切换

    CentOS 7 运行级别的切换 由命令行级别切换到窗口级别的命令未变:init 5或startx 由窗口级别切换到命令行级别的命令未变:init 3 新版本的运行级别都定义在 /lib/system ...

  6. "《算法导论》之‘字符串’":字符串匹配

    本文主要叙述用于字符串匹配的KMP算法. 阮一峰的博文“字符串匹配的KMP算法"将该算法讲述得非常形象,可参考之. 字符串‘部分匹配值’计算 KMP算法重要的一步在于部分匹配值的计算.模仿& ...

  7. mybatis配置开发

    以mysql为例: 一.需要的架包:mybatis.jar和mysql-connector-java.jar 二.一般会有两类配置文件:数据库配置文件和要执行的sql语句 数据库配置文件(配置文件中有 ...

  8. 苹果新的编程语言 Swift 语言进阶(八)--属性

    属性是特定类.结构或枚举的相关值,属性根据作用域不同分为实例属性与类型属性,还可以根据是否存储分为存储属性和计算属性. 1.1 实例属性 为一个类.结构或枚举定义的属性默认属于实例属性,即该属性属于为 ...

  9. Oracle与Mysql时间格式化

    一,Oracle格式化时间: Oracle 获取当前日期及日期格式 获取系统日期:  SYSDATE()    格式化日期:     TO_CHAR(SYSDATE(),'YY/MM/DD HH24: ...

  10. 和菜鸟一起学linux之initramfs方式启动

    关于initramfs initramfs在编译内核的同时被编译并与内核连接成一个文件,它被链接到地址__initramfs_start处,与内核同时被加载到ram中.initramfs被解析处理后原 ...