python(列表推导式和生成器表达式)
Posted shine-rainbow
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python(列表推导式和生成器表达式)相关的知识,希望对你有一定的参考价值。
从母鸡下蛋的故事讲起
1 老母鸡 = (‘鸡蛋%s‘%i for i in range(10)) 2 print(老母鸡) 3 for 蛋 in 老母鸡: 4 print(蛋) 5 g = (i*i for i in range(10)) 6 for i in g: 7 print(i)
①把列表解析的[]换成()得到的就是生成器表达式
②列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更加节省内存空间
③Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。
例如sum函数是python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议。
1 sum(i*2 for i in range(4))
1.列表推导式
例一:30以内所有能被3整除的数
1 # 列推导式 2 # [满足条件的元素相关的操作 for 元素 in 可迭代数据类型 if 元素相关的条件] 3 # 30以为所有能被3整除的数字 4 print([i for i in range(30) if i%3 == 0]) # 完整的列表推导式
例二:30以内所有能被3整除的数的平方
1 # 30以为所有能被3整除的平方 2 print([i*i for i in range(30) if i%3 == 0]) # 完整的列表推导式
例三:找到嵌套列表中名字包含‘e’的所有名字
1 # 找到嵌套列表中名字中含有‘e‘的所有名字 2 names = [[‘Tom‘,‘Billy‘,‘Jefferson‘,‘Andrew‘,‘Wesley‘,‘Steven‘,‘Joe‘], 3 [‘Alice‘,‘Jill‘,‘Ana‘,‘Wendy‘,‘Jennifer‘,‘Sherry‘,‘Eva‘]] 4 ret = [name for lst in names for name in lst if name.count(‘e‘) == 2] 5 print(ret)
2.字典推导式
例一:将一个字典的key和value对调
1 # 将一个字典的key和value对调 2 mcase = {‘a‘:10,‘b‘:34} 3 mcase_frequency = {mcase[k]:k for k in mcase} 4 print(mcase_frequency)
例二:合并大小写对应的value值,讲key统一成大写
1 # 合并大小写对应的value值,将key统一成小写 2 # {‘a‘:10+7,‘b‘:34,‘z‘:3} 3 mcase = {‘a‘:10,‘b‘:34,‘A‘:7,‘Z‘:3} 4 mcase_frequency = {k.lower():mcase.get(k.lower(),0)+mcase.get(k.upper(),0) for k in mcase}
3.集合推导式
例子:计算列表中每个值的平方,自带去重复的功能
1 # 集合推导式 自带去重功能 2 squared = {x**2 for x in [1,-1,2]} 3 print(squared)
以上是关于python(列表推导式和生成器表达式)的主要内容,如果未能解决你的问题,请参考以下文章