上節我們提到解決賦值中等號兩邊引數不一致的方法可以通過切片,但在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...