推导式:解析式:Comprehensions
一 列表推导式
语法:
[表达式 for 变量 in 可迭代对象 if 布尔表达式]
返回一个列表对象
表达式:可以是表达式,函数对象,函数的调用,运算,具体的值
流程:
1. 先执行for循环,根据可迭代对象,生成值
数据来源
2. 其次执行if判断,将for循环生成的数据,进行条件筛选
影响列表的元素个数
(可以省略)
3. 最后执行表达式,直接或间接获得列表的每一个元素
l=[i for i in range(1,30+1) if i%2==0]
print(l)
s='hello world'
l2=[i for i in s]
print(l2)
print([i+1 for i in range(10)])
print([9 for i in range(10)])
print([i**2 for i in range(10)])
def fun(x):
return x**2
print([fun(i) for i in range(10)])
print([(lambda x:x**2)(i) for i in range(10)])
print([(lambda x:x**2) for i in range(10)])
# 请输入一个值n,打印一个从1到n的列表,用lambda实现
a=lambda n:[i+1 for i in range(n)]
print(a(int(input('请输入一个整数:'))))
def fun(n):
temp=[]
for i in range(n):
temp.append(i+1)
return temp
print(a(int(input('请输入一个整数:'))))
二 字典推导式
语法:
{键:值 for 变量1,变量2 in 可迭代对象 if 布尔表达式}
d={key:value for key,value in [(1,'one'),(2,'two'),(3,'three')]}
print(d)
# 将上面的字典,键和值互换
d={value:key for key,value in [(1,'one'),(2,'two'),(3,'three')]}
print(d)
d={key:None for key,value in [(1,'one'),(2,'two'),(3,'three')]}
print(d)
d={i:None for i in range(10) if i%3==0}
print(d)
三 集合推导式
语法:
{表达式 for 变量 in 可迭代对象 if 布尔表达式}
# 从1~10的平方的集合
print({(i+1)**2 for i in range(10)})
四 补充
1. 没有元组推导式
2. 如果列表推导式的方括号换成圆括号:
创建生成器,不会创建任何元组
print(type([iforiinrange(4)]))
print(type({iforiinrange(4)}))
print(type({i:Noneforiinrange(4)}))
print(type((iforiinrange(4)))