python基础 23 专题 推导式

177 阅读2分钟

推导式:解析式: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)))