1、循环模式。[变量(加工后的变量) for 变量 in iterable]

print([i for i in range(1,101)])

# map:返回一个迭代器, 循环 类似于列表推导式的循环模式。
l1 = [1, 2, 3, 4, 5]
print([i**2 for i in l1])
iter3 = map(lambda x: x**2, l1)
print(list(iter3))

2、三元模式

# 如果i可以整除3就返回一个*,else返回i
print(['*' if i % 3 == 0 else i for i in range(1,21)])

3、筛选模式 [变量(加工后的变量) for 变量 in iterable if 条件]

# 三十以内所有的偶数留到列表中
print([i for i in range(1,31) if i % 2 == 0])

# filter:返回一个迭代器  ***
# 过滤 类似于列表推导式的筛选模式。
l1 = [2, 4, 5, 6, 7, 8, 10]
iter2 = filter(lambda x: x % 2 == 0, l1)
for i in iter2:print(i)

生成器:本质就是迭代器,自己用python代码构建的迭代器。

1,生成器函数。(yield)

def func():print(111)print(222)yield 666yield 777ret = func()
print(ret)
# 一个next 对应一个yield
print(next(ret))
print(next(ret))

2,生成器表达式。(i for i in range(100))就是列表推导式把中括号变成小括号。生成器对象:gentor

2.1)第一次取值不能用send传参

2.2)最后一个yield 永远也得不到send的传的值

send:send(gentor)
给上一个yield发送一个值
send 对应yield取值。

next:next(gentor) 
对应一个yield 取值。

def func():count = yield 666print(count)num = yield 'rock'print(num)yield 'wwww'n1 = yield 'fff'print(n1)
genor = func()
# print(next(genor))
# print(next(genor))
# # send不仅能对应yield取值,而且可以给上一个yield发送一个值
print(genor.send(None))
print(genor.send('888'))
print(genor.send('777'))
print(genor.send('111'))
# print(genor.send('222'))

yield 与 return 区别?

return 终止函数,yield 不会终止生成器函数。

都会返回一个值,return给函数的执行者返回值,yield是给next()返回值

yield 返回的单个值时返回的是原数据类型返回多个值时返回的是一个元组

def func():yield 3, 4, 5, 6genor = func()
print(next(genor))

yield from 将一个可迭代对象变成一个迭代器返回。

# yield from 将一个可迭代对象变成一个迭代器返回
def func():lst = ['111', '222', '333', '444']yield from lstgenor = func()
print(next(genor))    # 111
print(next(genor))    # 222
print(next(genor))    # 333
for i in genor:print(i)

yeild详解 https://juejin.im/post/5b3af9fb51882507d4487144

# 字符串
astr = 'ABC'
# 列表
alist = [1, 2, 3]
# 字典
adict = {"name": "wangbm", "age": 18}
# 生成器
agen = (i for i in range(4, 8))def gen(*args, **kw):for item in args:yield from itemnew_list = gen(astr, alist, adict, agen)
print(list(new_list))
# ['A', 'B', 'C', 1, 2, 3, 'name', 'age', 4, 5, 6, 7]

转载于:https://www.cnblogs.com/chen55555/p/10217891.html

列表推导式三种模式和生成器相关推荐

  1. 百钱买百鸡python编程列表推导式_使用循环和列表推导式两种方法求解百钱买百鸡问题。假设大鸡5元一只,中鸡3元一只,小鸡1元三只,现有100元钱想买100只鸡,有多少种买法?...

    [程序题]编写一个函数,输入n为偶数时,调用函数求1/2+1/4+...+1/n,当输入n为奇数时,调用函数 1/1+1/3+...+1/n [单选题]患者男,67岁.确诊为原发性支气管肺癌,为行手术 ...

  2. (1)列表推导式和(2)生成器表达式

    (1)列表推导式和(2)生成器表达式 (1)和(2)的区别是一个是一起再内存中全部生成,一个是用到的时候在生成 >>> [i for i in range(10)] 标致是[] [0 ...

  3. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一.三元表达式 语法:[成立1 if condition1 else成立2 if condition2 else ...if 成立N conditionN else 不成立] sex = 'man' ...

  4. Python--三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数...

    三元表达式 列表推导式 生成器表达式 递归与二分法 匿名函数 内置函数 一.三元表达式 name=input('姓名>>: ') res='True' if name == 'lee' e ...

  5. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  6. 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数(day4)

    一.三元表达式.列表推导式.生成器表达式 1.三元表达式name=input('姓名>>: ')res='SB' if name == 'alex' else 'NB'print(res) ...

  7. else列表推导式 if python_python3基础09列表推导式|迭代器|生成器|匿名函数

    "pythonic生物人"的第46篇分享. python3匿名函数.推导式.迭代器和生成器用法. 目录 1.匿名函数(lambda)2.推导式(comprehensions) 列表 ...

  8. python斐波那契数列for循环_Python编程题、for循环和列表推导式的用法题(阿凡提与国王比赛下棋、 斐波那契数列等)...

    # -*- coding: utf-8 -*- """ Spyder Editor This is a temporary script file. "&quo ...

  9. python列表推导式实现从1加到100_python之生成器和列表推导式

    一.生成器函数 1.生成器:就是自己用python代码写的迭代器,生成器的本质就是迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现). 2.用以下两种方式构建一个生成器: ...

最新文章

  1. php打印出来乱码_PHP输出中文乱码的解决方法(转载)
  2. Linux Load Average高但磁盘IO和CPU占用率不高的可能原因
  3. 利用Git Bash 远程访问服务器
  4. 【Spring注解系列05】@Import注入原理
  5. python 动漫卡通人物图片大全_用Python把人物头像动漫化,不同的表情给你不同的惊喜...
  6. 三星Galaxy Z Fold3已开始量产:搭载骁龙888 Pro 售价或超2万
  7. 因唯一缺点惨被吐槽!小米9升级版来了:8GB+256GB卖3299
  8. EasyUI 验证框使用方法
  9. oracle生成存储过程示例,oracle创建简单存储过程示例
  10. resin mysql_nginx+resin+mysql实现session共享
  11. linux 报警级别,linux PMBus总线驱动设计分析
  12. 轻松学会硬盘还原卡的安装和使用
  13. Windows系统怎么查看电脑的系统位数?
  14. Win10账户已被锁定解决方法
  15. JAVA设计模式详解(四)----------适配器模式
  16. mysql-order by分页复杂排序条件替换union-limit(使用if和case when实现复杂排序)
  17. 服务器名称指示SNI
  18. 微软 香港云服务器,香港云服务器好用吗
  19. 用友u9一些常用sql分享
  20. 泊松融合进阶——DFT求解二维泊松方程

热门文章

  1. 造谣“外卖员因差评杀人” 女子被依法刑事拘留
  2. java多线程编码实现_Java多线程编码
  3. python模式匹配算法_【python算法书】单词模式匹配?
  4. 新型智慧讲台的人工智能
  5. http mjpeg 图像读取
  6. Linux使用tcpdump抓获取WIFI包
  7. 【Spring】Bean instantiation via constructor failed nested exception Constructor threw exception
  8. 【Flink】Flink 1.10之改进的TaskManager内存模型与配置
  9. 【Elasticsearch】我们如何在 5 天内在同一个 Elasticsearch 集群中重新索引 360 亿份文档
  10. 【java】Java8 BiConsumer函数式接口