可迭代对象的分解

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

 

上一篇:Swift学习之十三:函数(Functions)


下一篇:css 图片在div中居中