1, 列表推导式就是在列表中进行 for 循环 if 语句判断, 最多两个 for, 一个 if 判断
- # 求 1 到 30 被 3 整除的数的平方
- li = [i*i for i in range(1,31)if i%3 == 0]
- print(li)
- li = [i for i in range(1,101)if i%2 == 0]
- l2 = [i for i in range(1,101)if i%2 == 1]
- print(li)
- print(l2)
- # 求列表中带两个'e'名字
- names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
- ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
- li = [name for i in names for name in i if name.count('e')==2]
- print(li)
用列表推导式能够构建的任何列表, 用别的都可以构建. 一行, 简单, 感觉高端. 但是不易排错.
- l2 = ['python%s 期'%i for i in range(1,12)]
- print(l2)
列表推导式有两种模式:
1, 循环模式,[经过加工的 i for i in 可迭代对象 ]
2, 筛选模式,[经过加工的 i for i in 可迭代对象, if 条件语句筛选]
2, 生成器推导式
把列表解析的 [ ] 换成 ( ) 得到的就是生成器表达式.
- l_obj = ('python%s 期'%i for i in range(1,12))
- print(l_obj)
- print(l_obj.__next__())
3, 字典推导式,
1, 将 dic 的键和值对调.
- mcase = {'a':10,'b':33}
- mcase_frequency = {mcase[k]:k for k in mcase}
- print(mcase_frequency)
2, 合并大小写对应的 value 值, 将 k 统一成小写
- mcase = {'a':10,'b':33,'A':8,'Z':9}
- mcase_frequency = {k.lower():mcase.get(k.lower(),0)+mcase.get(k.upper(),0)for k in mcase.keys()}
- print(mcase_frequency)
4, 集合的推导式
计算列表中每个值的平方, 自带去重功能
- squared = {x**2for x in [1,-1,2]}
- print(squared)
例 1: 过滤掉长度小于 3 的字符串列表, 并将剩下的转换成大写字母
例 2: 求 (x,y) 其中 x 是 0-5 之间的偶数, y 是 0-5 之间的奇数组成的元祖列表
例 3: 求 M 中 3,6,9 组成的列表 M = [[1,2,3],[4,5,6],[7,8,9]]
来源: http://www.bubuko.com/infodetail-2550092.html