''' 推导式 快速生成数据 ''' #仅有三种推导式---快速生成数据 #列表推导式 #集合推导式 #字典推导式 #列表推导式,根据遍历的数据判断是否满足后面条件,如果满足把前面表达式值当列表的元素 print([2 for x in range(10) ]) #输出[2, 2, 2, 2, 2, 2, 2, 2, 2, 2],2为元素值,循环为个数 print([x for x in range(10) ]) #输出[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],x为元素值,循环为个数 print([x for x in range(10) if x%2 ==0]) #输出[0, 2, 4, 6, 8],满足偶数条件 print([x**2 for x in range(10)]) #输出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81],把x的平方当元素 print([(x,y) for x in range(10) for y in range (5)]) #嵌套列表表达式,每个元素为元组(0,0---(9,4),双层循环生成元组列表 print([[x, x+1, x+2] for x in range(1,51, 3) ]) #生成复杂的推导式,输出[[1, 2, 3], [4, 5, 6]....[49,50,51]] #集合推导式,与列表推导式类似,只是使用大括号 print({2 for x in range(10)}) #输出{2} print({x for x in range(10)}) #输出{0, 1, 2, 3, 4, 5, 6, 7, 8, 9} print({x for x in range(10) if x%2 ==0}) #输出{0, 2, 4, 6, 8} print({(x,x+1) for x in range(10) if x%2 ==0}) #输出{(0, 1), (2, 3), (6, 7), (4, 5), (8, 9)} #字典推导式,与列表推导式类似,只是使用大括号且元素形式为dict:dict则生成字典推导式 print({2:x for x in range(10)}) #输出{2: 9} print({x:x for x in range(10)}) #输出{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9} print({x:{x:"heel", x+1:"heel"} for x in range(10) if x%2 ==0}) #输出{0: 'heel', 2: 'heel', 4: 'heel', 6: 'heel', 8: 'heel'} #拆包/解包---快速提取数据 #如果=左边只有一个变量,那么就是赋值 #如果=左边有多个变量,那么就是拆包,那么等号右边可以是list,tupple,set,dict #拆包赋值运算符左右的变量个数与右边的元素个数必须相同,否则出错 #拆包list data = [123, 45, 56 , 'heelo'] aa, bb, cc, dd = data print(aa,bb,cc,dd) #输出123 45 56 'heelo' aa,bb,cc = [12, 32, 22] print(aa,bb,cc) #输出12 32 22 # aa,bb = [12, 32, 22] #元素个数大于变量个数, no ok # aa,bb,cc,dd = [12, 32, 22] #元素个数小于变量个数, no ok #拆包set,注集合的顺序不能完全对应 data = {123, 45, 56 , 'heelo'} aa, bb, cc, dd = data print(aa,bb,cc,dd) #输出123 45 56 'heelo' aa,bb,cc = {11,33,44} print(aa,bb,cc) #输出33 11 44 #拆包tuple data = (123, 45, 56 , 'heelo') aa,bb,cc,dd = data print(aa,bb,cc,dd) #输出123 45 56 'heelo' aa,bb,cc = (11,33,44) print(aa,bb,cc) #输出33 11 44 #拆包dict,字典拆包默认是key,而且顺序也不保证 data = {123:12, 1233:'dddd', 'ass':'ddd', '12':12} aa,bb,cc,dd = data print(aa,bb,cc,dd) #输出123 1233 ass 12,输出的是key的值 aa,bb,cc = {123:12, 1233:'dddd', 'ass':'ddd'} print(aa,bb,cc) #输出123 1233 ass,输出的是key的值 # aa:a,bb:b,cc:c = {123:12, 1233:'dddd', 'ass':'ddd'} #此写法错误,No ok for temp in data.items(): x,y = temp #字典拆包 print(x, y) for x,y in data.items(): #字典拆包 print(x,y) #函数返回值拆包 def chaibao(): return 1,2,3 tp = chaibao() #多个返回值的表达式默认是元组 print(type(tp), tp) #<class 'tuple'> (1, 2, 3) a,b,c = tp #元组拆包 print(a,b,c) a,b,c = chaibao() #返回值直接拆包 print(a,b,c) d = 1,2,3 print(type(d), d) #<class 'tuple'> (1, 2, 3) #*可以对列表/元组/集合拆包 def test_chaibao(a, b, c): return a+b+c num1 = [11, 22, 33] num2 = {11, 22, 33} #集合拆包顺序不保证,不建议使用 num3 = (11, 22, 33) # p = test_chaibao(num1) #错误,等价于test_chaibao([11, 22, 33])只有一个参数,缺少参数 # p = test_chaibao(num2) #错误,等价于test_chaibao({11, 22, 33})只有一个参数,缺少参数 # p = test_chaibao(num3) #错误,等价于test_chaibao((11, 22, 33))只有一个参数,缺少参数 p= test_chaibao(*num1) #等价于test_chaibao(11, 22, 33) print(p) #输出66 p= test_chaibao(*num2) #等价于test_chaibao(11, 22, 33) print(p) #输出66 p= test_chaibao(*num3) #等价于test_chaibao(11, 22, 33) print(p) #输出66 #在python中=表达式右边如果有多个元素,python自动生成一个元组 x = 12,32 print(x) #(12, 32) print(type(x)) #<class 'tuple'> 不加括号默认就是元组 y = 12,32,45 print(y) #(12, 32) print(type(y)) #<class 'tuple'> 不加括号默认就是元组 x,y = 12,23 print(type(x)) #<class 'int'> print(type(y)) #<class 'int'> a=4 b=5 a,b = b,a #a,b交换值,等价于a ,b = (b,a)
08-23
1076