本篇文章帶給大家的內容是關於Python中可迭代物件分解為單獨的變數的實現方法(程式碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1、需求
現在有一個包含N個元素的元組或序列,現在想將它分解為N個單獨的變數。
2、解決方案
在python中,任何序列、元組、可序號對象,都可以透過一個簡單的賦值運算來分解為單獨的變數。
唯一要求是變數的總數和結構要和序列的相吻合。如果不吻合就會報錯
實例展示:
#将序列分解为单独的变量 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
3、思考
##其實不只元組列表,只要物件是可迭代的,那麼就可以執行分解操作,這包括字串、檔案、迭代器、生成器。 實例展示:#将序列分解为单独的变量 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
#4、需求升級
假如可序號物件可分解為N個元素,難道我們就要創造N個元素嗎?如果N值非常大怎麼辦?5、解決方案升級
Python中的『*表達式』可以滿足上述需求。例如,有無數個成績清單:grades,現在想去掉第一個成績和最後一個成績,然後求剩下成績的平均值:代碼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)))結果
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']##6 、*表達式技巧
*表達式在迭代一個變長的元組序列時尤其有用
程式碼:
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中可迭代物件分解為單獨的變數的實作方法(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!