下一篇文章: Python實用技法第2篇:使用deque保留最新的N個元素
如今有一個包含N個元素的元組或序列,如今想將它分解爲N個單獨的變量。
在python中,任何序列、元組、可序列號對象,均可以經過一個簡單的賦值操做來分解爲單獨的變量。python
惟一要求是變量的總數和結構要和序列的相吻合。若是不吻合就會報錯segmentfault
實例展現:code
#將序列分解爲單獨的變量 m=(1,2) x,y=m print("x=",x) print("y=",y) print("*"*30) data=["mark",18,"超級帥",(1992,5,4)] name,age,feature,birthday=data print("name=",name) print("age=",age) print("feature=",feature) print("birthday=",birthday) print("*"*30) name,age,feature,(year,mon,day)=data print("name=",name) print("age=",age) print("feature=",feature) print("year=",year) print("mon=",mon) print("day=",day)
結果對象
x= 1 y= 2 ****************************** name= mark age= 18 feature= 超級帥 birthday= (1992, 5, 4) ****************************** name= mark age= 18 feature= 超級帥 year= 1992 mon= 5 day= 4
實際上不單單只是元組列表,只要對象是可迭代的,那麼就能夠執行分解操做,這包括字符串、文件、迭代器、生成器。字符串
實例展現:get
#將序列分解爲單獨的變量 mark="mark" m,a,r,k=mark print(m) print(a) print(r) print(k) print("*"*30) #有時候咱們想丟棄某個值,單因爲變量數量必須和要分解的對象的可分解數量相同,此時咱們可使用_來表示要丟棄的值。 mark="mark" m,a,r,_=mark print(m) print(a) print(r) #其實_仍是一個變量,指示看起來舒服點 print(_)
結果:字符串處理
m a r k ****************************** m a r k
假如可序列號對象可分解爲N個元素,難道咱們就要建立N個元素嗎?若是N值很是大怎麼辦?
Python中的『*表達式』能夠知足上述需求。例如,有無數個成績列表:grades,如今想去掉第一個成績和最後一個成績,而後求剩下成績的平均值:it
代碼ast
import numpy as np grades=list(range(10))#定義一個0-999的分數列表 print("grades:"+str(grades)) first,*middle,last=grades print("middle:"+str(middle)) print("去掉第一個和最後一個分數後的平均值:"+str(np.mean(middle)))
結果email
grades:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] middle:[1, 2, 3, 4, 5, 6, 7, 8] 去掉第一個和最後一個分數後的平均值:4.5
固然這個【*表達式】能夠位於第一個位置,也能夠是最後一個,或者其它位置。
假若有一些用戶記錄,記錄由姓名和電子郵件地址組成,後面跟着任意數量的電話號碼:
record=('mark','1782980833@qq.com','18321859453','18956245389') name,email,*phone_numbers=record print(name) print(email) print(phone_numbers)
運行結果:
mark 1782980833@qq.com ['18321859453', '18956245389']
代碼:
records=[ ('foo',1,2), ('bar','hello'), ('foo',3,4), ] def do_foo(x,y): print('foo',x,y) def do_bar(s): print('bar',s) for tag,*args in records: if tag=='foo': do_foo(*args) elif tag=='bar': do_bar(*args)
結果:
foo 1 2 bar hello foo 3 4
代碼:
line='nobody:*:-2:-2:unp user:/var/empty:/user/nim/false' uname,*fileds,homedir,sh=line.split(':') print(uname) print(homedir) print(sh)
結果:
nobody /var/empty /user/nim/false
下一篇文章: Python實用技法第2篇:使用deque保留最新的N個元素