列表推导式和生成器表达式
主要内容:
1,列表推导式
2,生成器表达式
l = [i for i in range(10)] print(l) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] l1 = ['选项%s' % i for i in range(10)] print(l1)
1,把列表解析的[]换成()得到的就是生成器表达式
2,列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存
3,Python不但使用迭代器协议,让for循环变得更加通用.大部分内置函数,也是使用迭代器协议访问对象的.例如:sum函数是Python的内置函数,该函数使用迭代器协议访问对象,而生成器实现了迭代器协议,所以我们可以直接这样计算一系列值的和:
a = sum(x**2 for x in range(4)) print(a)
各种推导式:
列表推导式:
例一: 30以内所有能被3整除的数
l1 = [i for i in range(31) if i % 3 is 0] print(l1)
例二:30以内所有能被3整出的数的平方
l2 = [i**2 for i in range(31) if i % 3 is 0] print(l2)
例三:找到嵌套列表中的名字含有两个"e"的多有名字
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] l3 = [el for item in names for el in item if el.count("e") == 2] print(l3)
字典推导式:
例一:讲一个字典的key和value对调
dic = {'name': "chenrun", 'age': 18} dic1 = {dic[k]:k for k in dic} print(dic1)
例二:合并大小写对应的value的值,将k统一成小写
mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} mcase1 = {i.lower(): mcase.get(i.lower(), 0) + mcase.get(i.upper(), 0) for i in mcase} print(mcase1) # 没有该元素会返回指定值0
集合推导式
例:计算列表中每个值的平方,自带去重功能
s = {x**2 for x in [1,-1,2]} print(s) # {1, 4}
练习题:
1,过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
s = ['13', 'sfsdfsdfs', 'sf', 'sdfsdfsdfs'] l1 = [item.capitalize() for item in s if len(item) > 2] print(l1)
2,求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元组列表
l = [(2,3), (1,1), (6,6), (6,7)] l1 = [item for item in l if ((item[0] <= 5 and item[0] >= 0) and (item[1] <= 5 and item[1] >= 0)) and (item[0]%2 is 0 and item[1]%2 is 1)] print(l1)
3,求M中3,6,9组成的列表
M = [[1,2,3],[4,5,6],[7,8,9],[1,1,1]] l1 = [item for item in M if 3 in item or 6 in item or 9 in item] print(l1)