【python学习笔记】python列表推导式和生成器表达式
2021/10/4 11:40:55
本文主要是介绍【python学习笔记】python列表推导式和生成器表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
列表推导式
列表推导和可读性
笛卡尔积
生成器表达式
列表推导是构建列表(list)的快捷方式,可以将一个序列或者其他可迭代类型中的元素过滤或者是加工,然后新建一个列表;也可以生成两个或以上的可迭代类型的笛卡尔积。注:列表推导的作用只有一个:生成列表。
生成器表达式可以生成其他任何类型的序列。
他们都具有很好的代码可读性。
列表推导式
列表推导和可读性
原则:使用列表推导来创建新的列表,并且尽量保持简短,若列表推导的代码超过了两行,可以考虑使用for循环重写。
symbols = 'sdfhjkf' codes = [ord(symbol) for symbol in symbols] print(codes) 结果: [115, 100, 102, 104, 106, 107, 102]
注1:python 回忽略代码里[],{},()的换行,所以若有多行的列表,列表推导,生成器表达式,字典,可以省略续行符”\“。
注2:列表推导在python3中不会出现变量泄露的问题。
列表推导,生成器表达式,集合(set)推导,字典推导,在python3中都有自己的局部作用域,局部变量并不会影响到表达式上下文中的同名变量。但是在pythn2.x中就回出现变量泄露的问题。(此处不再举例)
例子: symbol = 'sdfhjkf' codes = [ord(symbol) for symbol in symbol] print(symbol) print(codes) 结果: sdfhjkf #(symbol的值被保留) [115, 100, 102, 104, 106, 107, 102]
笛卡尔积
举例: colors = ["black","white"] sizes = ["s","m","l"] tshirts = [(color,size) for color in colors for size in sizes] print(tshirts) 结果: [('black', 's'), ('black', 'm'), ('black', 'l'), ('white', 's'), ('white', 'm'), ('white', 'l')]
注:更改for循环顺序就能更改tshirts的元素顺序。
生成器表达式
生成器表达式遵守迭代器协议,可以逐个的产出元素,而不是先建立一个完整的列表,然后再把这个列表传递到某个函数中,前者更能节省内存。
格式和列表推导差不多,只是把方括号改成圆括号。
生成器表达式初始化元组
举例: symbols = "asdfg" tuple = tuple(ord(symbol) for symbol in symbols ) print(tuple) 结果: (97, 115, 100, 102, 103)
生成器表达式初始化数组
举例: from array import array symbols = "asdfg" arr = array('I',(ord(symbol) for symbol in symbols) ) print(arr) 结果: array('I', [97, 115, 100, 102, 103])
注:array的构造方法需要两个参数,所以里面需要括号,第一个参数指定了存储方式。(这块知识后期我在补上)
生成器表达式计算笛卡尔积
用到生成器表达式之后,内存里不会留下6个组合的列表,因为生成器表达式会在每次for循环时才会生成一个组合。生成器逐个产出元素。这样可以大大降低开销!
举例: colors = ["black","white"] sizes = ["s","m","l"] for shirt in ("%s,%s"%(color,size) for color in colors for size in sizes): print(shirt) 结果: black,s black,m black,l white,s white,m white,l
如果对您有帮助,点个赞吧那就!
The End!
这篇关于【python学习笔记】python列表推导式和生成器表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-26Python基础编程
- 2024-11-25Python编程基础:变量与类型
- 2024-11-25Python编程基础与实践
- 2024-11-24Python编程基础详解
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南