前言
推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列构建另一个新的数据序列的结构体。 共有三种推导,在Python2和3中都有支持:
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
列表(list)推导式
语法
out_express: 列表生成元素表达式,可以是有返回值的函数。 for out_exp in input_list: 迭代input_list将out_exp传入out_express表达式中。 condition: 条件表达式。 variable = [out_express for out_exp in input_list condition]
实例一:判断0-30列表元素被3整除
multiples = [i for i in range(30) if i % 3 is 0] print(multiples) # Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
字典(dict)推导式
语法
''' 语法一: key:字典中的key value:字典中的value dict.items():序列 condition:条件表达式 key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理 value_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理 ''' {key_exp:value_exp for key,value in dict.items() if condition} ''' 语法二: key:字典中的key value:字典中的value dict.items():序列 condition:条件表达式 key_exp:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp处理 value_exp1:在for循环中,如果条件表达式condition成立(即条件表达式成立),返回对应的key,value并作key_exp,value_exp1处理 value_exp2:在for循环中,如果条件表达式condition不成立(即条件表达式不成立),返回对应的key,value并作key_exp,value_exp2处理 ''' {key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
实例一:获取字典中key值是小写字母的键值对
dict1 = {"a":10,"B":20,"C":True,"D":"hello world","e":"python教程"} dict2 = {key:value for key,value in dict1.items() if key.islower()} print(dict2) # Output: {'a': 10, 'e': 'python教程'}
实例二:大小key合并
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.keys() if k.lower() in ['a','b'] } print mcase_frequency # Output: {'a': 17, 'b': 34}
集合(set)推导式
语法
out_express: 列表生成元素表达式,可以是有返回值的函数。 for out_exp in input: 迭代input将out_exp传入out_express表达式中。
out_exp: 迭代变量。
input: 可迭代对象,可以是列表,原则、字典、集合以及range区间。 condition: 条件表达式。 variable = {out_express for out_exp in input_list condition}
实例一:
squared = {x**2 for x in [1, 1, 2]} print(squared) # Output: set([1, 4])