一,生成器表达式

#生成器表达式比列表解析更省内存,因为惰性运算

 #!/usr/bin/env python
#_*_coding:utf-8_*_ new_2 = (i*i for i in range(100)) #生成器表达式
print(list(new_2))
#注意括号是小括号

对比

#!/usr/bin/env python
#_*_coding:utf-8_*_ # egg_list=['鸡蛋%s' %i for i in range(10)] 列表推倒式
# print(egg_list) # laomuji = ('鸡蛋%s' %i for i in range(1,11)) 生成器表达式
# print(laomuji)
# print(next(laomuji))
# print(next(laomuji))

小知识

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #小知识
def func():
yield from 'ABC' #相当于下面的for i in
# for i in 'ABC':
# yield i
g = func()
print(next(g))

二,各种推导式

#推导式套路
# variable = [out_exp_res for out_exp in input_list if out_exp == 2]
# out_exp_res:  列表生成元素表达式,可以是有返回值的函数。
# for out_exp in input_list:  迭代input_list将out_exp传入out_exp_res表达式中。
# if out_exp == 2:  根据条件过滤哪些值可以。

1.列表推导式

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #列表推导式
#普通版本
new_l = []
for i in range(100):
new_l.append(i*i)
list(range(100))
#进阶版本
new_l = [i*i for i in range(100)] #列表推倒式
print(new_l) print(len([ i+5 for i in range(100) if i % 3 == 0 ]))
#执行过程 for >> if >> i+5 >> append[i+5]
#详解过程
# new_l = []
# for i in range(100):
# if i % 3 == 0:
# new_l.append(i+5) print(len([i//2 if i%2==0 else i for i in range(100) if i % 3 == 0 ])) #三元运算肯定要返回个值
#执行过程 for >> 后if >> 前if >> append[i//2]
#详解过程
# for i in range(100):
# if i % 3 == 0:
# if i%2 == 0:
# new_l.append(i//2)
# else:
# new_l.append(i) # 30以内的数字,所有能被3整除的整数
print([i for i in range(30) if i%3 == 0])
# 30以内的数字,所有能被3整除的整数的平方
print([i*i for i in range(30) if i%3 == 0])
# 找到嵌套列表中名字含有2个'e'的所有名字
# names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
# ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
# print([name for lst in names for name in lst if name.count('e') >=2]) 从前往后看
# 执行过程
# 第一个for >> 第二个for >> if >> append[name]

2.字典推导式

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #字典推导式
# 将一个字典的key和value对调
mcase = {'a': 10, 'b': 34}
for i in mcase:
print(i)
#[i for i in mcase] #列表推导式
print({key:key+'' for key in mcase}) #更改k
print({key:mcase[key] for key in mcase}) #取values
print({mcase[key]:key for key in mcase}) #kv 对调 #合并大小写对应的value值,将k统一成小写
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
mcase_frequency = {k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) for k in mcase}
print(mcase_frequency)
# 执行过程
# for k in mcase >> k.lower() : values >> mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) >> {}
# mcase.get# (k.lower(), 0) get 到了就返回值,get不到就返回0

3.集合推导式

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #集合推导式,自带去重功能
l = [-1,1,2,1]
print({i for i in l})
print({i*i for i in l})

小结:练习题

 #!/usr/bin/env python
#_*_coding:utf-8_*_ #练习题
# 例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
str_l = ['a','ab','abc','abcd','abcde']
print([i.upper() for i in str_l if len(i) > 3])
# 例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表
print([(x,y) for x in range(5) if x % 2 == 0 for y in range(5) if y % 2 == 1])
# 例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]
M = [[1,2,3],[4,5,6],[7,8,9]]
print([i[2] for i in M])

python开发函数进阶:生成器表达式&各种推导式的更多相关文章

  1. Python-02 生成器表达式,列表推导式

    列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for  变量i  in 可迭代的数据类型 ] 列表 ...

  2. python之迭代器、生成器及列表推导式

    一.迭代器 迭代器就是迭代的工具,迭代是一个重复的过程,每次重复都是一次迭代并且每次迭代的结果都是下次迭代的初始值. lst=[1,2,3,4,5] count=0 while count<le ...

  3. Python进阶-VI 生成器函数进阶、生成器表达式、推导式

    一.生成器函数进阶 需求:求取移动平均数 1.应用场景之一,在奥运会气枪射击比赛中,每打完一发都会显示平均环数! def show_avg(): print('你已进入显示移动平均环数系统!') a ...

  4. Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分

    生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...

  5. python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式

    一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...

  6. 【python】 迭代器、生成器、列表推导式

    一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...

  7. python开发函数进阶:可迭代的&迭代器&生成器

    一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的   iterable#str list tuple set dict#可迭代的 ——对应的标志 __iter__ 2.判断一个变量是不 ...

  8. python开发函数进阶:匿名函数

    一,匿名函数 #简单的需要用函数去解决的问题 匿名函数的函数体 只有一行#也叫lambda表达式# cal2(函数名) = lambda n(参数) : n*n(参数怎么处理,并且返回值)#参数可以有 ...

  9. python开发函数进阶:装饰器

    一,装饰器本质 闭包函数 功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 作用:解耦,尽量的让代码分离,小功能之前的分离. 解耦目的,提高代码的重用性 二,设计模式 开放封闭原则 ...

随机推荐

  1. 报错 IllegalArgumentException occurred calling getter of cn.itcast.entity.Customer.cid

    我碰到这个问题的时候,没有数据类型不匹配的情况,也没有表达无法向action传递数据的情况,一直报这样的错误,意思就是无法使用Customer中的get方法来赋值.完整报错如下所示: HTTP Sta ...

  2. ng2 学习笔记(二)表单及表单验证

    在上一篇文章中提到了表单,只说了表单的数据绑定,这一篇文章主要讲一下表单验证,为什么把表单单独拿出来学习,主要是因为,表单是商业应用的支柱,我们用它来执行登录.求助.下单.预订机票.安排会议,以及不计 ...

  3. javascript简单介绍总结(一)

    DOM (Document Object Model)(文档对象模型)是用于访问 HTML 元素的正式 W3C 标准.在 HTML 中,JavaScript 语句向浏览器发出的命令.语句是用分号分隔: ...

  4. [转载]java操作word生成水印

    应用场景 为了保护版权或辨别文件的真伪,有时需要在生成的Word文件中动态添加水印,PageOffice组件的WaterMark类就封装了给在线编辑的Word文件添加水印这一功能,调用接口非常简单. ...

  5. SSM三大框架整合(Spring+SpringMVC+MyBatis)

    一. 导包 18个必须的包 二.配置Spring MVC的web文件 <?xml version="1.0" encoding="UTF-8"?> ...

  6. 2017.10.30 Epicor -ERP

    1 公司新用ERP系统,做使用培训,mark... This course reviews the project management flow in the Epicor application. ...

  7. flash播放器插件与flash播放器的区别

    flash插件是一个网页ActiveX控件,而flash播放器是一个exe的可执行程序.前者用于播放网页中的falsh动画,而后者用于播放本地swf格式文件.

  8. PostgreSQL 日常SQL记录

    平时用的比较多的SQL语句,有时候会忘掉一点点,在这里记录一下: 1.创建表的同时,插入数据: create table test as select generate_series(1, 10000 ...

  9. JQuery动态隐藏和显示DIV

    <head> <script language="javascript"> function HideWeekMonth() { $("#tt1& ...

  10. jsp中的session

    浏览器和服务器的异常通话 常用方法 setAttribute(String key,Object value);//设置值 getAttribute(String key); //取值 Invalid ...