列表/字典生成式、生成器(generator)、迭代器(Iterator)
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
'''
在列表中存放1-10的数据
'''
#第一种方式
list0 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#第二种方式
list0 = list(range(1, 11))
#第三种方式
list0 = []
for i in range(1, 11):if i % 2 != 0:list0.append(i)
#列表中存放1-10的偶数,用列表生成式来写
list0 = [i for i in range(1, 11) if i % 2 != 0]'''
列表生成器的格式:
[存放于列表中的元素 元素来源 元素筛选条件]
'''
练习:
list0 = [" ", "\nabc", "\t", "hello"]
在list0的基础上 快速的生成一个列表,列表的存放的元素是非空白序列
#如何判断一个序列是空白字符序列 ---> 按照空白进行切割 列表的长度为0
# 去除字符序列两端空白 strip() ---> 按照空白区去除两端的内容 如果最终剩下的是空序列res = [item for item in list0 if len(item.split()) != 0]
print(res)
res = [item for item in list0 if len(item.strip()) != 0]
print(res)关于strip()
'''
any whitespace string is a separator and empty strings are removed from the result.
如果使用的是空白分割符的话 会将生成的列表中中的空字符序列给移除掉
'''
#判断数据是否是指定类型 isinstance()
print(type(a))
res = isinstance(a, str)
print(res)
字典生成式
'''
dict0 = {"英语":66, "数学":78, "政治":42, "语文":59}去除掉字典中value < 60的数据
'''
dict0 = {"英语":66, "数学":78, "政治":42, "语文":59}
#第一种方式
new_dict = {}
for k, v in dict0.items():if v >= 60:new_dict[k] = v#利用字典生成式
dict1 = {k:v for k, v in dict0.items() if v >= 60}
print(dict1)
生成器(generator)
Python中,这种一边循环一边计算的机制,称为生成器:generator。
生成器可以生成一批数据,但是这些数据不会立即存放于内存中 ,内存中存放的是生成器对象,保存生成数据的方法。
'''
声明生成器
'''
#第一种方式
gene = (i for i in range(1, 10001))
#第二种方式 函数的return改为yield
def test():for i in range(1, 10001):yield iprint(i,"yield之后执行的语句") # 当下一次获取时候回执行
'''
获取数据
'''#通过next方法,可以获取数据,直到抛出StopIteration错误
print(gene.next())
print(gene.next())
...
print(gene.next())
# StopIteration 当生成器中数据已经取完了,再获取的话就会报错#通过for循环获取数据 可以忽略StopIteration错误
ge = test()
for i in range(10):value = next(ge)print(value)
迭代器(Iterator)
#可以使用迭代器进行遍历
from collections import Iterator#符合这个类型的都可以通过for in进行遍历
from collections import Iterableres = isinstance(11, Iterable) #Falseres = isinstance("11", Iterable) #Trueres = isinstance([], Iterable) #Trueres = isinstance((), Iterable) #Trueres = isinstance({}, Iterable) #Trueres = isinstance(set(), Iterable) #True
能够使用for in遍历的数据不一定可以使用迭代器来进行遍历
迭代器的遍历是通过next方法进行遍历的
能使用迭代器来进行遍历 前提必须是属于Itarator这种类型
为什么list
、dict
、str
等数据类型不是Iterator
?
因为Python的Iterator
对象表示的是一个数据流,Iterator对象可以被next()
函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration
错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()
函数实现按需计算下一个数据,所以Iterator
的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator
甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。
a = "11"next(a)
print(res) # 'str' object is not an iteratorres = isinstance("", Iterator) #Falseres = isinstance([], Iterator) #Falseres = isinstance({}, Iterator) #Falseres = isinstance((), Iterator) #Falseres = isinstance(set(), Iterator) #False
如何将可以使用for in 进行遍历的数据 也可以使用迭代器进行遍历??
可以将数据通过iter()的方法将其转化为Iterator的类型
ite = iter(["12", "17", "34", "99"])
value = next(ite)
print(value)
小结:
凡是可作用于for
循环的对象都是Iterable
类型;
凡是可作用于next()
函数的对象都是Iterator
类型,它们表示一个惰性计算的序列;
集合数据类型如list
、dict
、str
等是Iterable
但不是Iterator
,不过可以通过iter()
函数获得一个Iterator
对象。
列表/字典生成式、生成器(generator)、迭代器(Iterator)相关推荐
- 函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数
一.递归函数 递归函数:就是在函数调用阶段直接或者间接的调用自己 递归函数的两个阶段: 1.回溯:不停的重复的一个过程,在这个过程中将问题不断的简单化,直到最终打到要求(条件) 2.递归:一次次的往回 ...
- python3 列表生成式,字典生成式,generator列表生成器的应用
# -*- coding:utf-8 -*-# 列表生成式是快速生成一个列表的一些公式 numbers = [] for x in range(0,101):numbers.append(x) pri ...
- Python(迭代、三元表达式、列表生成、生成器、迭代器)
迭代 什么是迭代1 重复2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在 ...
- SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理
SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...
- php generator 风雪,PHP 生成器Generator理解
这篇文章介绍的内容是关于PHP 生成器Generator理解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 转载整理自:寄凡.风雪之隅.PHP手册 生成器(Generator)可解决的 ...
- Python中生成器generator和迭代器Iterator的使用方法
一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...
- Python高级特性:切片、迭代、列表生成式、生成器与迭代器
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...
- Python高级特性(切片,迭代,列表生成式,生成器,迭代器)
掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...
- 列表生成式、生成器、迭代器
一句话概念 列表生成式--可以直接在列表里进行运算 生成器--一边循环一边计算的机制,称为生成器:generator(就是生成一个不运行的函数或者列表,即数据流) 第二句:生成器与列表的区别--生成器 ...
- 【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器
接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了.今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片.循环中的迭代意义.方便的列表生成式操作以及生成器和迭代器 ...
最新文章
- iOS JSON解析 NSJSONReadingMutableContainers的作用:
- centos7.x 升级svn版本到指定版本(1.10)
- 微信网页授权,获取微信code,获取access_tocken,获取用户信息
- 28句话让你的人际关系更上一层楼
- Hapoxy+keepalived实现双主高可用负载均衡
- element 表格宽度自适应_Java 设置Word中的表格自适应的3种方式
- 通过Windows远程桌面连接将远程文件传输至本地
- 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计
- 中文信息处理——初始概率,发射概率,转移概率
- 数字图像处理知识(3)
- javascript的数组和数组元素的遍历,实现全国省份和城市一览表
- windows 护眼颜色修改
- 创建可引导的 macOS High Sierra 安装 U 盘
- raid5什么意思?如何做raid5?raid5 几块硬盘?
- axios 登录后设置header,vue+axios 全局添加请求头和参数操作
- html自动生成价格,Excel技巧:用VLOOKUP函数制作产品报价单,自动生成价格!
- 新浪微博桌面2014 v3.0.4.35238 官方版
- 各种饼的做法,先存起来,老了慢慢学着做
- 基于GNU radio + HackRF One 实现信号发射与FM接收
- 软件危机定义、发生原因、常见表现,如何避免软件危机?
热门文章
- 【源码+图片素材】1小时做出Java坦克大战小游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java课程设计_课设
- 原创玄幻小说--那时花开--第一章前序
- php smart模板技术入门教程
- ModbusRTU协议数据格式
- 神仙打架!清华公布2020特奖候选人名单,有人三篇顶会一作,还有人...
- 计算机主机发出滴滴声音怎么办,电脑蓝屏后主机滴滴的响应该怎么处理教程
- Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22
- java人机猜拳_Java实现人机猜拳小游戏
- 微信支付提示微信登录失败:redirect_uri域名与后台配置不一致,错误码:10003
- Flash视频教程一把抓,自动获取Flash教程----谭石南