列表生成式

列表生成式即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这种类型

为什么listdictstr等数据类型不是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类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

列表/字典生成式、生成器(generator)、迭代器(Iterator)相关推荐

  1. 函数递归/二分法/列表,字典生成式/三元表达式/匿名函数/内置函数

    一.递归函数 递归函数:就是在函数调用阶段直接或者间接的调用自己 递归函数的两个阶段: 1.回溯:不停的重复的一个过程,在这个过程中将问题不断的简单化,直到最终打到要求(条件) 2.递归:一次次的往回 ...

  2. python3 列表生成式,字典生成式,generator列表生成器的应用

    # -*- coding:utf-8 -*-# 列表生成式是快速生成一个列表的一些公式 numbers = [] for x in range(0,101):numbers.append(x) pri ...

  3. Python(迭代、三元表达式、列表生成、生成器、迭代器)

    迭代 什么是迭代1 重复2 下次重复一定是基于上一次的结果而来 如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在 ...

  4. SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理

    SIGIA_4P python学习 列表 字典 集合 面对对象编程 闭包 装饰器 函数式编程 作用域 异常处理 本文连接 简介 SIGIA_4P 网址 a. 课程OKR Objectives and ...

  5. php generator 风雪,PHP 生成器Generator理解

    这篇文章介绍的内容是关于PHP 生成器Generator理解,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 转载整理自:寄凡.风雪之隅.PHP手册 生成器(Generator)可解决的 ...

  6. Python中生成器generator和迭代器Iterator的使用方法

    一.生成器 1. 生成器的定义 把所需要值得计算方法储存起来,不会先直接生成数值,而是等到什么时候使用什么时候生成,每次生成一个,减少计算机占用内存空间 2. 生成器的创建方式 第一种只要把一个列表生 ...

  7. Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程 ...

  8. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  9. 列表生成式、生成器、迭代器

    一句话概念 列表生成式--可以直接在列表里进行运算 生成器--一边循环一边计算的机制,称为生成器:generator(就是生成一个不运行的函数或者列表,即数据流) 第二句:生成器与列表的区别--生成器 ...

  10. 【Python基础】Python高级特性:切片、迭代、列表生成式、生成器与迭代器

    接着廖雪峰老师的学习教程,小编要开始加快推进Python的学习进程了.今天的笔记内容是Python高级特性,其中包括快速访问对象类型元素的切片.循环中的迭代意义.方便的列表生成式操作以及生成器和迭代器 ...

最新文章

  1. iOS JSON解析 NSJSONReadingMutableContainers的作用:
  2. centos7.x 升级svn版本到指定版本(1.10)
  3. 微信网页授权,获取微信code,获取access_tocken,获取用户信息
  4. 28句话让你的人际关系更上一层楼
  5. Hapoxy+keepalived实现双主高可用负载均衡
  6. element 表格宽度自适应_Java 设置Word中的表格自适应的3种方式
  7. 通过Windows远程桌面连接将远程文件传输至本地
  8. 打印服务器协议,基于TCP/IP协议的嵌入式网络打印服务器设计
  9. 中文信息处理——初始概率,发射概率,转移概率
  10. 数字图像处理知识(3)
  11. javascript的数组和数组元素的遍历,实现全国省份和城市一览表
  12. windows 护眼颜色修改
  13. 创建可引导的 macOS High Sierra 安装 U 盘
  14. raid5什么意思?如何做raid5?raid5 几块硬盘?
  15. axios 登录后设置header,vue+axios 全局添加请求头和参数操作
  16. html自动生成价格,Excel技巧:用VLOOKUP函数制作产品报价单,自动生成价格!
  17. 新浪微博桌面2014 v3.0.4.35238 官方版
  18. 各种饼的做法,先存起来,老了慢慢学着做
  19. 基于GNU radio + HackRF One 实现信号发射与FM接收
  20. 软件危机定义、发生原因、常见表现,如何避免软件危机?

热门文章

  1. 【源码+图片素材】1小时做出Java坦克大战小游戏_Java初级项目_Java练手项目_Java项目实战_Java游戏开发实战教学_Java课程设计_课设
  2. 原创玄幻小说--那时花开--第一章前序
  3. php smart模板技术入门教程
  4. ModbusRTU协议数据格式
  5. 神仙打架!清华公布2020特奖候选人名单,有人三篇顶会一作,还有人...
  6. 计算机主机发出滴滴声音怎么办,电脑蓝屏后主机滴滴的响应该怎么处理教程
  7. Leetcode刷题100天—5855. 找出数组中的第 K 大整数(优先队列)—day22
  8. java人机猜拳_Java实现人机猜拳小游戏
  9. 微信支付提示微信登录失败:redirect_uri域名与后台配置不一致,错误码:10003
  10. Flash视频教程一把抓,自动获取Flash教程----谭石南