序列解包主要用於更好的簡化賦值操作。
Python 中有很多很實用的語法糖,這些語法糖可以幫助我們簡化代碼、更易理解等優點,接下里再看一個 Python3 中特別實用的語法序列解包(序列解包是 Python 3.0 之後纔有的語法)。
那什麼是序列解包呢?先看一個例子:
>>> a, b, c = 1, 2, 3
>>> a
1
>>> b
2
>>> c
3
>>>
這種方法並不限於列表和元組,而是適用於任意序列類型(甚至包括字符串和字節序列)。只要賦值運算符左邊的變量數目與序列中的元素數目相等,你都可以用這種方法將元素序列解包到另一組變量中。
解包的使用還可以更有逼格,可以利用 * 表達式獲取單個變量中的多個元素,只要它的解釋沒有歧義即可。
- 獲取的值默認爲 list
獲取剩餘部分:
>>> a, b, *c = 0, 1, 2, 3
>>> a
0
>>> b
1
>>> c
[2, 3]
獲取中間部分:
>>> a, *b, c = 0, 1, 2, 3
>>> a
0
>>> b
[1, 2]
>>> c
3
如果左值比右值要多,那麼帶 * 的變量默認爲空
>>> a, b, *c = 0, 1
>>> a
0
>>> b
1
>>> c
[]
>>> a, *b, c = 0, 1
>>> a
0
>>> b
[]
>>> c
1
嵌套解包
>>> (a, b), (c, d) = (1, 2), (3, 4)
>>> a
1
>>> b
2
>>> c
3
>>> d
4
>>> a, b, c, d
(1, 2, 3, 4)
接下來實戰一下,假如一個字符串 ‘ABCDEFGH’,要輸出下列格式:
A [‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’]
B [‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’]
C [‘D’, ‘E’, ‘F’, ‘G’, ‘H’]
D [‘E’, ‘F’, ‘G’, ‘H’]
E [‘F’, ‘G’, ‘H’]
F [‘G’, ‘H’]
G [‘H’]
H []
即每次取出第一個作爲首,然後的字符串拆成列表,放置在後面
一般的處理過程是:
-
將切片中索引爲 0 的字符賦值給 a
-
將切片中索引爲 1 之後字符再賦值給 s
-
用 list 函數將字符串轉變爲列表
-
用 while 循環來 s 來判斷,爲空,則退出循環
>>> s = 'ABCDEFGH'
>>> while s:
... x, s = s[0], list(s[1:])
... print(x, s)
...
A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
B ['C', 'D', 'E', 'F', 'G', 'H']
C ['D', 'E', 'F', 'G', 'H']
D ['E', 'F', 'G', 'H']
E ['F', 'G', 'H']
F ['G', 'H']
G ['H']
H []
上面的處理,可以用序列解包的方法會來處理。序列解包,在賦值時無疑更方便、更簡潔、更好理解、適用性更強!
運用序列解包的功能重寫上面的代碼:
>>> s = 'ABCDEFGH'
>>> while s:
... x, *s = s
... print(x, s)
...
A ['B', 'C', 'D', 'E', 'F', 'G', 'H']
B ['C', 'D', 'E', 'F', 'G', 'H']
C ['D', 'E', 'F', 'G', 'H']
D ['E', 'F', 'G', 'H']
E ['F', 'G', 'H']
F ['G', 'H']
G ['H']
H []
————————————————
版權聲明:本文爲CSDN博主「極客點兒」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/yilovexing/article/details/80576788