Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体。
推导式比普通的for循环语句效率要高。
推导式种类
- 列表(list)推导式
- 字典(dict)推导式
- 集合(set)推导式
- 元组(tuple)推导式
列表推导式
列表推导式语法
[表达式 for 变量 in 序列]
[表达式 for 变量 in 序列 if 条件] #只有一个if时放最后,如果for循环中条件成立,则变量才返回,可以应用于表达式,形成列表。
[表达式1 if条件 else 表达式2 for 变量 in 序列] #if else时三目运算放前面,如果for循环中条件成立,则变量才返回,可应用于表达式,否则应用于表达式2,形成列表。
[表达式 for if for if for if…] for嵌套if,if嵌套for…
列表推导式举例
# 单条件
names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_names = [name.upper()for name in names if len(name)>3]
print(new_names)
result:
['ALICE', 'JERRY', 'WENDY', 'SMITH']
# if else型
names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
new_names = [name.upper() if len(name)>3 else name.lower() for name in names]
print(new_names)
result:
['bob', 'tom', 'ALICE', 'JERRY', 'WENDY', 'SMITH']
#嵌套循环型
list1=[(i, j) for i in range(3) if(i%2==0) for j in range(5) if(j%2)==0]
print(list1)
result:
[(0, 0), (0, 2), (0, 4), (2, 0), (2, 2), (2, 4)]
字典推导式
字典推导式语法
{key_exp:value_exp for key,value in dict.items()}
{key_exp:value_exp for key,value in dict.items() if condition}
{key_exp:value_exp1 if condition else value_exp2 for key,value in dict.items()}
字典推导式举例
```其它同列表推导式
dict1 = {"a":10,"B":20,"C":True,"d":"mangnolia","E":"python"}
dict2 = {key:value if key.isupper() else "error" for key,value in dict1.items()}
print(dict2)
result:
{'a': 'error', 'B': 20, 'C': True, 'd': 'error', 'E': 'python'}
元组集合推导式
- 集合推导式同列表推导式,但是会自动去重。
元组推导式
- 如果按照和列表类似的方法使用元组推导式,会得到一个生成器对象,需要人为将其转换为元组。
a = (i+1 for i in [1, 2, 3])
print(a)
b = tuple(a)
print(type(b), b)
result:
<generator object <genexpr> at 0x0000013B026940C0>
<class 'tuple'> (2, 3, 4)