跟我一起学python-推导式

后端 / 笔记 / 2021-09-29

什么是推导式

推导式是一种语法糖,可以更便捷的生成列表,元组,集合,字典

  • 列表推导式
  • 集合推导式
  • 字典推导式

列表推导式

直接列表推导

固定语法,没有捷径

语法

[expr for var in iter]
  • expr: 表达式
  • var: 循环变量
  • iter: 可迭代对象

将每个字符输出两遍

str = "hello world"
lst = [i*2 for i in str]
print(lst)
['hh', 'ee', 'll', 'll', 'oo', '  ', 'ww', 'oo', 'rr', 'll', 'dd']

带条件的列表推导

相当于是一个过滤条件

语法

[expr for var in iter if con]
  • expr: 表达式
  • var: 循环变量
  • iter: 可迭代变量
  • con: 过滤条件

生成10以内的偶数

# 生成10以内的偶数
lst  =[i for i in range(1,11) if i % 2 ==0]
print(lst)
[2, 4, 6, 8, 10]

带else的推导式

有点三目运算符的味道

[expr1 if con else expr2 for var in iter]
  • expr2: 表达式1
  • con: 条件
  • expr2: 表达式2
  • var: 循环变量
  • iter: 可迭代对象

通过推导式判断是否及格

# 通过推导式判断是否及格
lst1 = [60,70,50,40]
lst2 = ['及格' if score >=60 else '不及格' for score in lst1]
print(lst2)
['及格', '及格', '不及格', '不及格']

集合推导式

其实集合推导式和列表推导式大同小异只是将[] 换成{}

直接推导

collect1 = {i for i in range(5)}

print(type(collect1))
print(collect1)
{0, 1, 2, 3, 4}

带条件推导

collect2 = {i for i in range(1,11) if i % 2==0}

print(collect2)

{2, 4, 6, 8, 10}

带else的推导

collect3 = {0 if i %2==0 else 1 for i in range(1,11)}
print(collect3)
{0, 1}

这里为什么会只有 0 , 1 。别忘了 set中元素是不可重复的哦

字典推导式

这里需要注意字典推导式和前面有点不太一样。

直接推导

语法

{key,val for key,val in enumerate(XX}
  • key: 键
  • val: 值
  • enumerate(): 枚举函数
  • XX 要迭代的变量
# list 转 字典
lst =["jack","tom","eric","alice"]
dic1 ={key:val for key,val in enumerate(lst)}
print(dic1)

{0: 'jack', 1: 'tom', 2: 'eric', 3: 'alice'}

带条件的推导

{key,val for key,val in enumerate(XX if con}
  • key: 键
  • val: 值
  • enumerate(): 枚举函数
  • XX 要迭代的变量
  • con: 过滤条件

比如说过滤掉jack

lst =["jack","tom","eric","alice"]
dic2 = {key:val for key,val in enumerate(lst) if val!="jack"}
print(dic2)
{1: 'tom', 2: 'eric', 3: 'alice'}