闲话就不多说了,直接上代码吧
- 列表解析
v_list = [ "获取到第 %s 个元素"%i for i in range(10)] print(v_list) // 执行的结果 ['获取到第 0 个元素', '获取到第 1 个元素', '获取到第 2 个元素', '获取到第 3 个元素', '获取到第 4 个元素', '获取到第 5 个元素', '获取到第 6 个元素', '获取到第 7 个元素', '获取到第 8 个元素', '获取到第 9 个元素']
- 生成器表达式
v_list = ( "获取到第 %s 个元素"%i for i in range(10)) print(v_list) // 执行的结果 ['获取到第 0 个元素', '获取到第 1 个元素', '获取到第 2 个元素', '获取到第 3 个元素', '获取到第 4 个元素', '获取到第 5 个元素', '获取到第 6 个元素', '获取到第 7 个元素', '获取到第 8 个元素', '获取到第 9 个元素']
- 总结下:
- 把列表解析的[]换成()达到的就是生成器表达式
- 列表解析与生成器表达式都是一种便利的编程方式,只不过是生成器表达式更节省内存
- python不但使用迭代器协议,让for循环更加通用,大部分内置函数,也是使用迭代器协议访问对象
- 推导式公式
上面我们已经简单介绍了列表推导式和生成器表达式,除此之外,还有字典推导式,集合推导式等等
下面以列表推导式来介绍通过公式,其他的推导式对于这个公式也是适用的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: 根据条件过滤哪些值可以。
- 列表推导式
30以内所有能被4整除的数
30以内所有能被3整除的数的平方list = [i for i in range(30) if i % 4 is 0] print(list) //执行结果 [0, 4, 8, 12, 16, 20, 24, 28]
找到嵌套列表中名字含有两个‘e’的所有名字list = [i ** 2 for i in range(30) if i % 4 is 0] print(list) //执行结果 [0, 16, 64, 144, 256, 400, 576, 784]
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] list = [name for lst in names for name in lst if name.count('e') >= 2] print(list) // 执行的结果 ['Jefferson', 'Wesley', 'Steven', 'Jennifer']
- 字典推导式
将一个字典的key和value对调param = {"a":10,"b":20} list = {param[key]:key for key in param} print(list) //执行结果 {10: 'a', 20: 'b'}
- 集合推导式
计算列表中每个值的平方,并自带去重功能list = {i ** 2 for i in [1,-1,2,-2,8,6,5]} print(list) //执行结果 {64, 1, 4, 36, 25}