91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中序列拆分的過程是怎么樣的

發布時間:2021-10-11 09:06:39 來源:億速云 閱讀:136 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關Python中序列拆分的過程是怎么樣的,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

元組拆分

元組拆分是最為常見的一種拆分,示例如下:

p = (4, 5)
x, y = p 
print(x, y) # 4 5

如果寫成

x, y, z = p

那么就會拋出ValueError異常:“not enough values to unpack (expected 3, got 2)”
如果寫成

p = (4, 5, 6)
x, y = p

那么就會拋出ValueError異常:“too many values to unpack (expected 2)”

字符串拆分

字符串的拆分示意如下:

s = 'Hello'
a, b, c, d, e = s
print(a) # H

拆分時丟棄值

如果在拆分時想丟棄某些特定的值,可以用一個用不到的變量名來作為丟棄值的名稱(常選'_'做為變量名),如下所示:

s = 'Hello'
a, b, _, d, _ = s
print(a) # H

嵌套序列拆分

Python也提供簡潔的對嵌套序列進行拆分的語法。如下所示我們對一個比較復雜的異質列表進行拆分:

data = ['zhy', 50, 123.0, (2000, 12, 21)]
name, shares, price, (year, month, day) = data
print(year) # 2000

如果你想完整地得到(2000, 12, 21)這個表示時間戳的元組,那么你就得這樣寫:

data = ['zhy', 50, 123.0, (2000, 12, 21)]
name, shares, price, date = data
print(date) # (2000, 12, 21)

從任意長度的可迭代對象中拆分

之前我們說過,如果我們想從可迭代對象中分解出\(N\)個元素,但如果這個可迭代對象長度超過\(N\),則會拋出異常"too many values to unpack"。針對這個問題的解決方案是采用"*"表達式。

比如我們給定學生的分數,想去掉一個最高分和一個最低分,然后對剩下的學生求平均分,我們可以這樣寫:

def avg(data: list):
    return sum(data)/len(data)
# 去掉最高分,最低分然后做均分統計
def drop_first_last(grades):
    first, *middle, last = grades
    return avg(middle)
print(drop_first_last([1,2,3,4])) # 2.5

還有一種情況是有一些用戶記錄,記錄由姓名+電子郵件+任意數量的電話號碼組成,則我們可以這樣分解用戶記錄:

record = ['zhy', 'zhy1056692290@qq.com', '773-556234', '774-223333']
name, email, *phone_numbers = record
print(phone_numbers) # ['773-556234', '774-223333']

事實上,如果電話號碼為空也是合法的,此時phone_numbers為空列表。

record = ['zhy', 'zhy1056692290@qq.com']
name, email, *phone_numbers = record
print(phone_numbers) # []

還有一種使用情況則更為巧妙。如果我們需要遍歷變長元組組成的列表,這些元組長度不一。那么此時*表達式可大大簡化我們的代碼。

records = [('foo', 1, 2), ('bar', 'hello'), ('foo', 3, 4)]
for tag, *args in records:
    if tag == 'bar':
        print(args)
# ['hello']

在對一些復雜的字符串進行拆分時,*表達式也顯得特別有用。

line = "nobody:*:-2:-2:-2:Unprivileged User:/var/empty:/usr/bin/false"
uname, *fields, home_dir, sh = line.split(':')
print(home_dir) # /var/empty

*表達式也可以和我們前面說的嵌套拆分和變量丟棄一起結合使用。

record = ['ACME', 50, 123.45, (128, 18, 2012)]
name, *_, (*_, year) = record
print(year) # 2012

最后再介紹*表達式用于遞歸函數的一種黑魔法,比如與遞歸求和結合可以這樣寫:

items = [1, 10, 7, 4, 5, 9]
def sum(items):
    head, *tail = items
    return head + sum(tail) if tail else head
print(sum(items)) # 36

不過,Python由于自身遞歸棧的限制,并不擅長遞歸。我們最后一個遞歸的例子可以做為一種學術上的嘗試,但不建議在實踐中使用它。

 Martelli A, Ravenscroft A, Ascher D. Python cookbook[M]. " O'Reilly Media, Inc.", 2005. 數學是符號的藝術,音樂是上界的語言。

看完上述內容,你們對Python中序列拆分的過程是怎么樣的有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

拜泉县| 和硕县| 林州市| 阿克苏市| 汽车| 潮州市| 马山县| 郁南县| 静海县| 安西县| 庄浪县| 深州市| 清远市| 柳河县| 广平县| 拉孜县| 武川县| 内黄县| 桐城市| 永丰县| 康乐县| 安仁县| 时尚| 屏边| 奎屯市| 金川县| 都匀市| 昌宁县| 江川县| 林州市| 综艺| 永顺县| 湖口县| 密山市| 沙湾县| 苍梧县| 桐庐县| 泽普县| 成武县| 故城县| 尤溪县|