Python进阶练习--扩展语法

'''
推导式
快速生成数据

'''

#仅有三种推导式---快速生成数据
#列表推导式
#集合推导式
#字典推导式

#列表推导式,根据遍历的数据判断是否满足后面条件,如果满足把前面表达式值当列表的元素
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)

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值