Python:列表推导式、生成器、迭代器
1. 列表推导式
列表推导式是通过旧的列表通过公式推导出新的列表
还有集合推导式、字典推导式,与列表推导式类似
格式为:
[表达式 for 变量 in 旧列表]
[表达式 for 变量 in 旧列表 if条件]
# 过滤掉长度小于或等于3的人名
names = ['tom','lily','abc','jack','steven']
result = [name for name in names if len(name) > 3]
print(result) #['lily', 'jack', 'steven']# 过滤掉长度小于或等于3的人名,并使每个人名首字母大写
result = [name.capitalize() for name in names if len(name) > 3]
print(result) #['Lily', 'Jack', 'Steven']
# 将1-100之间能被3整除,组成一个新的列表
newlist = [i for i in range(1,101) if i % 3 == 0 and i % 5 ==0]# 将0-5的偶数,0-10的奇数组成元组,添加到新的列表中
newlist = [(x,y) for x in range(5) if i%2 == 0 for y in range(10) if y % 2 != 0]# 如果判断条件有else,如果写推导式
newlist = [i+1 if i > 3 else i-1 for i in range(5)]
2. 生成器
2.1 生成器的概念
通过列表生成式(列表推导式),我们可以直接创建一个列表。
但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间部白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?
这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。
2.2 创建生成器
通过列表推导式创建
# 通过:(列表推导式)可以得到生成器
g = (x*3 for x in range(20))
print(type(g))
print(g)# 方式1:通过调用__next()__方式得到元素
print(g.__next__()) #0
print(g.__next__()) #3
print(g.__next__()) #6# 方式2:通过next(生成器对象)方法
print(next(g)) #6
print(next(g)) #12
print(next(g)) #15
借助函数创建
只要函数中出现了yield,说明函数就不是函数,变成了生成器
创建步骤:
- 定义一个函数,在函数中使用yield关键字
- 调用函数,接收调用结果
- 得到的结果就是生成器
- 借助于next()、__next()__得到元素
def func():n = 0while True:n += 1yield n # 相当于return n + 暂停g = func()
print(g) #<generator object func at 0x000002687B393DC8>
print(next(g)) #1
print(next(g)) #2
print(next(g)) #3
2.3 生成器的作用
实现线程下协程的操作
def task1(n):for i in range(n):print("正在听第{}首歌".format(i))yield Nonedef task2(n):for i in range(n):print("正在搬第{}块转".format(i))yield Noneg1 = task1(5)
g2 =task2(5)while True:try:g1.__next__()g2.__next__()except:pass
3. 迭代器
3.1 可迭代对象
生成器、元组、列表、字典、集合、字符串都是可迭代的
判断是否可迭代可用方法isinstance()
3.2 迭代器的概念
迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
迭代器只能往前不会后退。
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
可迭代对象不一定是迭代器,列表是可迭代对象,但不是迭代器;生成器是可迭代对象,也是是迭代器
3.3 迭代器的创建
通过iter()函数将可迭代对象变成迭代器
list = [1,3,4,6]
list1 = iter(list)print(next(list1))
print(next(list1))
print(next(list1))
Python:列表推导式、生成器、迭代器相关推荐
- Python 列表推导式 - Python零基础入门教程
目录 一.Python 列表推导式简介 二.Python 列表推导式语法 三.Python 列表推导式练习 1.Python 列表推导式案例一 2.Python 列表推导式案例二 3.Python 列 ...
- 【技能树共建】Python 列表推导式
Python 列表推导式是什么 列表推导式是 Python 语言特有的一种语法结构,也可以看成是 Python 中一种独特的数据处理方式, 它在 Python 中用于 转换 和 过滤 数据. 其语法格 ...
- python关键字列表的表达式,python 列表推导和生成器表达式的使用
序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...
- python 列表推导式csv_Python 列表推导式
在本教程中,我们将学习使用 Python 列表推导. Python 列表推导式 列表推导式是一种基于现有列表创建列表的语法结构. 列表推导式为创建列表提供了一种简洁的方法. 常见的要求是创建新列表,其 ...
- python列表推导式是什么
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表. 它的结构是在一个中括号里包含一个表达式,然后是一个for语句,然后是 0 个或多个 for 或者 if 语句.那个表达式可以是任意的, ...
- python列表推导式中使用if语句及他们的等价形式
python列表推导式中使用if语句及他们的等价形式 在python的列表推导式中使用if语句有两种形式: # 方式1: 起过滤作用 [expr(x) for x in li if cond(x)] ...
- python列表推导式生成随机数_python 【迭代器 生成器 列表推导式】
python [迭代器 生成器 列表推导式] 一.迭代器 1.迭代器 如何从列表.字典中取值的 index索引 ,key for循环 凡是可以使用for循环取值的都是可迭代的 可迭代协议 :内部含 ...
- python列表推导式实现从1加到100_python之生成器和列表推导式
一.生成器函数 1.生成器:就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.用以下两种方式构建一个生成器: ...
- python三元表达式求值_python 三元表达式的 列表推导式 生成器推导式
python中三元表达式的语法如下 ===if else result = x if condition else y 另外一种三元表达式,比较少见 result = (x, y)[condition ...
- Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数
本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...
最新文章
- 转-项目管理心得:一个项目经理的个人体会、经验总结
- mysql子查询是什么_mysql子查询
- itext实现HTML转换为PDF
- 选择多级分类_② 供应商管理(分类、评估、选择、绩效、集成、供应商过多的对策、多级供应商管理)...
- python3 logging模块_python3中使用logging模块写日志,中文乱码,如何解决?
- 在危机中呈现转机的网络管理
- hexo之next主题添加分类
- [转贴] 刷机利器 Rom Manager 的简单用法
- php制作judge评测机,HelloJudge2-Judger
- 关于阿里云服务器租用费用的介绍
- auto.js制作简易音乐app(一)
- Android wps自定义功能,完美兼容安卓4.2新增多项功能 WPS移动版升级至5.2
- 社区团购怎么做_分享有哪些方法可以做社区团购小程序
- 双十一特辑:Python采集商品数据,实时了解商品价格
- 【Excel函数】相对定位与绝对定位
- 软考——程序设计语言概述
- Pycharm 注册码
- 作文 深海机器人_作文机器人(共5篇)
- 题解——两种算法解Leetcode题库第977题(暨双指针法小结)
- Solarwinds 系列介绍