詳解Python3序列賦值 序列解包

2022-10-04 11:48:12 字數 1510 閱讀 8878

上節我們提到解決賦值中等號兩邊引數不一致的方法可以通過切片,但在python3中我們可以利用特定的語法更加方便的處理這種情況,如下示例。

當帶 * 出現在結尾間時

l = [1, 程式設計客棧2, 3, 4, 5]

a, *b = l

print(a, b)

示例結果:

1 [2, 3, 4, 5]

我們可以看到a匹配了列表中第乙個元素值,而b匹配了後面所有的內容,並且為列表。即當我們利用帶 * 符號匹配時,就可以解決賦值時等號兩邊元素數量不相等的情形,那麼這種帶 * 的處理方式都有哪些詳細的使用場景和用法呢?

當帶 * 出現在中間時

l = [1, 2, 3, 4, 5]

a, *b, c = l

print(a, b, c)

示例結果:

1 [2, 3, 4] 5

即a和c獲取了開頭和結尾的元素值,而中間所有的元素值都是賦值給了b

當帶 * 出現在開頭時

l = [1, 2, 3, 4, 5]

*a, b = l

print(a, b)

即b獲取了列表結尾的元素值,而開頭到末尾但不包含末尾的所有元素值賦值給了a

通用化類似序列賦值,擴充套件的序列解法的用法也可以擴充套件到任何序列型別,比如元組,字串:

s = 'python'

a,b,*c = s

print(a,b,c)

a,b,*c = list(s)

print(a,b,c)

示例結果

p y ['t', 'h', 'o', 'namzyxfuyi']

p y ['t', 'h', 'o', 'n']

即我們可以看到字串的結果和處理列表非常相似,即和對 list(s) 進行擴充套件序列解包的結果一致。

一些邊界情況

在使用擴充套件序列解包語法,我們也可能遇到一些極端的情況,比如沒有剩下的內容用於匹配帶 * 的項,此時該項會被賦值為空列表 。

l = [1, 2, 3, 4]

a, b, c, d, *e = l

1 2 3 4

而如果在賦值時出現帶多個 * 項,或者只有帶 * 的項都會引程式設計客棧發錯誤:

l = [1, 2, 3, 4]

*a, b, *c = l

l = [1, 2, 3, 4]

*a = l

*a, b, *c = l

^syntaxerror: two starred expressions in assignment

*a = l

^syntaxerror: starred assignment target must be in a list or tuple

總結以上所述是小編給大家介紹的python3序列賦值、序列解包,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對我們**的支援!

本文標題: 詳解python3序列賦值、序列解包

本文位址: /jiaoben/python/259127.html

python3 序列切片

格式 切片使用兩個冒號分隔的3個數字來完成。第乙個數字表示切片開始位置 預設為0 第二個數字表示切片截止 但不包含 位置 預設為列表長度 第三個數字表示切片的步長 預設為1 當步長省略是可省略最後乙個冒號。1.切片操作不會因為下標越界而丟擲異常,而是簡單地在列表尾部截斷或者返回乙個空列表。alist...

Python3 序列解包

自 序列解包是 python 3.0 之後才有的語法 什麼是序列解包呢?先看乙個例子 a,b,c 1,2,3 a 1 b 2 c 3 這種方法並不限於列表和元組,而是適用於任意序列型別 甚至包括字串和位元組序列 只要賦值運算子左邊的變數數目與序列中的元素數目相等,你都可以用這種方法將元素序列解包到另...

python3 序列化物件和反序列化物件

def store data,filename 序列化,寫到本地磁碟檔案 import pickle with open filename,wb as f pickle.dump data,f def grab filename 反序列化,從本地檔案讀出原有的物件 import pickle wit...