python开发函数进阶:生成器表达式&各种推导式
一,生成器表达式
#生成器表达式比列表解析更省内存,因为惰性运算
#!/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开发函数进阶:生成器表达式&各种推导式的更多相关文章
- Python-02 生成器表达式,列表推导式
列表推导式和生成器表达式 列表推导式,生成器表达式1,列表推导式比较直观,占内存2,生成器表达式不容易看出内容,省内存. [ 变量(加工后的数据) for 变量i in 可迭代的数据类型 ] 列表 ...
- python之迭代器、生成器及列表推导式
一.迭代器 迭代器就是迭代的工具,迭代是一个重复的过程,每次重复都是一次迭代并且每次迭代的结果都是下次迭代的初始值. lst=[1,2,3,4,5] count=0 while count<le ...
- Python进阶-VI 生成器函数进阶、生成器表达式、推导式
一.生成器函数进阶 需求:求取移动平均数 1.应用场景之一,在奥运会气枪射击比赛中,每打完一发都会显示平均环数! def show_avg(): print('你已进入显示移动平均环数系统!') a ...
- Python开发基础-Day10生成器表达式形式、面向过程编程、内置函数部分
生成器表达式形式 直接上代码 # yield的表达式形式 def foo(): print('starting') while True: x=yield #默认返回为空,实际上为x=yield No ...
- python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式
一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...
- 【python】 迭代器、生成器、列表推导式
一.可迭代对象.迭代器 1.可以被for循环的数据类型(可迭代对象): 字符串(str).列表(list).字典(dict).元祖(tuple).range() 2.迭代器 2.1 将可迭代对象==& ...
- python开发函数进阶:可迭代的&迭代器&生成器
一,可迭代的&可迭代对象 1.一个一个的取值就是可迭代的 iterable#str list tuple set dict#可迭代的 ——对应的标志 __iter__ 2.判断一个变量是不 ...
- python开发函数进阶:匿名函数
一,匿名函数 #简单的需要用函数去解决的问题 匿名函数的函数体 只有一行#也叫lambda表达式# cal2(函数名) = lambda n(参数) : n*n(参数怎么处理,并且返回值)#参数可以有 ...
- python开发函数进阶:装饰器
一,装饰器本质 闭包函数 功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 作用:解耦,尽量的让代码分离,小功能之前的分离. 解耦目的,提高代码的重用性 二,设计模式 开放封闭原则 ...
随机推荐
- 遇到不确定的json格式
我们在调用webservice接口,或者http接口时,返回的json数据,有时候会因为情况不同,返回的数据格式也不一样. 比如我在调用增加档案接口时,传入要添加的档案id,如果成功了,success ...
- jmeter导入jar包后在beanshell中import失效的问题解决
最近一直很忙,没有时间来更新了,今天抽空把之前遇到的问题记录下来. 之前在使用jmeter做http请求性能压测时,因为要对所有入参做排序再加密作为一个入参,所以写了一段java代码,用来处理入参,打 ...
- mysql 自查询
先介绍用法: 用法解释 select * from a,b : shopping 商品表 , baixitest SELECT b.name from shopping as a, baixi ...
- 【spark】示例:连接操作
我们有这样两个文件 任务:找出用户评分平均值大于4的电影. 我们看两个文件结果,第一个文件有电影的ID和名字,第二个文件有电影的ID和所有用户的评分 对于任务结果所需要的数据为电影ID,电影名字,平均 ...
- docker 创建镜像,并推送到私有仓库
创建镜像 创建 Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...
- L129
Iraq Sees Spike in Water-Borne IllnessesIraqi health officials say that a health crisis stemming fro ...
- Android中从SD卡中获取歌词并与歌曲同步
先看看效果图吧,再看代码 转换文件的编码格式 package com.xm; import java.io.BufferedInputStream; import java.io.BufferedRe ...
- Unity 2D 入门
原文:Introduction to Unity 2D 作者:Sean Duffy 译者:kmyhy 3/15/17 更新说明: 升级至 Unity 5.5. Unity 是一个非常流行和强大的游戏引 ...
- Image Pyramid (二)
上一篇文章里,我们介绍了图像金字塔的基本原理,就是一种分层次的下采样.这篇文章里我们简单介绍一下图像金字塔的一种应用,image blending.利用图像金字塔做 image blending,可以 ...
- Python 调用C函数
/******************************************************************** * Python 调用C函数 * 说明: * Tony在处理 ...