首頁  >  文章  >  後端開發  >  Python中可迭代物件分解為單獨的變數的實作方法(程式碼)

Python中可迭代物件分解為單獨的變數的實作方法(程式碼)

不言
不言轉載
2018-10-11 14:08:352184瀏覽

本篇文章帶給大家的內容是關於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中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除