1、序列分解为单独的变量
任何序列都可以通过赋值操作分解成单独的变量。
x=(1,2) a,b=x print(a) 1 print(b) 2 data=['love python',1,(2020,1,1)] s,i,tu=data print(s) 'love python' print(i) 1 print(tu) (2020, 1, 1)
但是要注意,变量的总数与结构要与待分解的序列一致。
实际上,只要对象是可迭代的,就可以执行分解操作。
s='hello' a,b,c,d,e=s print(a) 'h'
2、任意长度的可迭代对象的分解
如果待分解的可迭代对象太长,但是你只是想要其中一部分元素,你可以使用'*表达式'来收集多余的值。
first,*middle,last=1,2,3,4,5,6,7,8,9 print(first) 1 print(middle) [2, 3, 4, 5, 6,7, 8] print(last) 9
注意,middle值一直都是列表。
first,*middle,last=1,2 print(first) 1 print(middle) [] print(last) 2
又如,对于列表l=[9,8,1,7,5,10,3,4]
如果要比较最后一位和前面各位均值的大小,可以这样做:
l=[9,8,1,7,5,10,3,4] *re,la=l if sum(re)/len(re)>la: print(True) True
3、实例
'*表达式'用于带标记的元组:
records=[ ('1',8,10), ('a','love python','forever'), ('2',7,9), ('b','enthusiasm','forever') ] for tag,*args in records: if tag.isalpha(): print(' '.join(args)) else: print(sum(args)/len(args))
输出结果为:
9.0 love python forever 8.0 enthusiasm forever
提取路径字符串中相关的值:
ss='/home/w/3tensorflow2.0/chapter_5/data/titanic' _,home,user,*_,wenjianjia=ss.split('/') print(home) 'home' print(user) 'w' print(wenjianjia) 'titanic
使用'*表达式'实现一个递归求和函数:
items=[1,2,3,4,5,6,7] def mysum(items): head,*tail=items return head+mysum(tail) if tail else head print(mysum(items)) 28