推导式¶
条件推导式¶
exp_1 if condition else exp_2
x=int(input())
print('x is odd') if x&1 else print('x is even')
list 推导式¶
相当于将条件推导式放到循环里:
# 形式一
exp_1 if condition else exp_2 for x in data
# 形式二
exp_1 for x in data if condition
0~10 偶数平方,奇数不变
l=[x if x&1 else x*x for x in range(11)]
print(l)
0~10 偶数平方,奇数剔除
l=[x*x for x in range(11) if not x&1]
print(l)
tuple 推导式¶
将 list 推导式的方括号 []
换成圆括号 ()
即可
得到的是生成器,而不是元组,用 tuple()
函数处理得到的生成器可得到元组
t=(x*x for x in range(11) if not x&1)
print(t)
# <generator object <genexpr> at 0x10a2b1c10>
print(tuple(t))
# (0, 4, 16, 36, 64, 100)
dict 推导式¶
# 形式一
{key:val for key,val in dict.items() if condition}
# 形式二
{key:val_1 if condition else val_2 for key,val in items}
其中 dict.items()
不一定要是已经存在的 dict,zip
临时打包一个也可以
d={x:y for x,y in zip(range(0,6),range(5,11))}
print(d)
不一定要从循环同时获得 key
和 val
,获得 key
后再计算 val
也是可以的
d={x:chr(x+65) for x in range(0,26)}
print(d)
巧妙交换 key
和 val
可以将 dict 转换为从 val-key
的映射
_d={'A':1,'B':2,'C':3}
d={x:y for y,x in _d.items()}
print(d)