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开发函数进阶:装饰器
一,装饰器本质 闭包函数 功能:就是在不改变原函数调用方式的情况下,在这个函数前后加上扩展功能 作用:解耦,尽量的让代码分离,小功能之前的分离. 解耦目的,提高代码的重用性 二,设计模式 开放封闭原则 ...
随机推荐
- imageView图片放大缩小及旋转
imageView图片放大缩小及旋转 一.简介 二.方法 1)设置图片放大缩小效果 第一步:将<ImageView>标签中的android:scaleType设置为"fitCen ...
- SQL命令查询Oracle存储过程信息(代码内容等)
SELECT * FROM ALL_SOURCE where TYPE='PROCEDURE' AND TEXT LIKE '%0997500%'; --查询ALL_SOURCE中,(脚本代码)内 ...
- fiddler抓取不到HTTPS响应
火狐浏览器也安装证书了,但还是抓取不到HTTPS类型的数据包 解决办法:设置代理时在 为所有协议使用相同代理服务器(S)前打钩
- 如何让pycharm以py.test方式运行
第一步:进入File—Settings—Python Integrated Tools 发现设置中Default test runner是Unittests 将其改为py.test,点击OK保存 如果 ...
- iptables(二)iptables实际操作之规则查询
如果你是一个新手,在阅读如下文章时,请坚持读到最后,读的过程中可能会有障碍,但是在读完以后,你会发现你已经明白了. 在进行iptables实验时,请务必在测试机上进行. 之前在iptables的概念中 ...
- day5-configparser模块
一.概述 在软件开发过程中,很多时候需要处理配置文件的读取解析和改写,在python中专门处理配置文件的模块就是configpaser了.顾名思义,configpaser就是配置解析器,可用来对符合格 ...
- Node.js小白开路(一)-- fs篇
文件操作在我们的日常功能模块之中是十分的常见的内容,nodeJS也不例外的为我们提供了之一操作内容,当时在我们了解文件操作的之前我们先来了解一下链接. 连接可以理解成为一个纸箱相关文件内容的地址,其主 ...
- 【scala】语法的省略
我们直到JAVA在语法方面是冗长的,但是JAVA的可读性非常好. 在Scala的语法并不像JAVA那样冗长,但是又不失可读性,我们这里记录一下常见的语法省略. 首先是我们可以省略数据类型,因为Scal ...
- 【河南第十届省赛-B】情报传递
题目描述 抗日战争时期,在国共合作的大背景下,中共不断发展壮大,其情报工作也开始由获取警报性.保卫性信息,向获取军政战略性情报转变.各系统情报组织遵循"荫蔽精干,长期埋伏,积蓄力量,以待时机 ...
- UI-定时器与动画使用总结
#pragma mark - 定时器 ******************************************************************************* ...