跳转至

推导式

条件推导式

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)

不一定要从循环同时获得 keyval,获得 key 后再计算 val 也是可以的

d={x:chr(x+65) for x in range(0,26)}
print(d)

巧妙交换 keyval 可以将 dict 转换为从 val-key 的映射

_d={'A':1,'B':2,'C':3}
d={x:y for y,x in _d.items()}
print(d)

set 推导式

评论