什么是推导式
推导式是一种语法糖,可以更便捷的生成
列表,元组,集合,字典
- 列表推导式
- 集合推导式
- 字典推导式
列表推导式
直接列表推导
固定语法,没有捷径
语法
[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'}