1. 程式人生 > >Python3 序列解包

Python3 序列解包

索引 中間 net 賦值運算符 轉變 方法 適用於 字節序 運算

轉載自:https://blog.csdn.net/yilovexing/article/details/80576788

序列解包是 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
[]
>>> c 1
>>> a, b, *c = 0, 1
>>> a
0
>>> b
1
>>> c
[]

# 嵌套解包

>>> (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 []

即每次取出第一個作為首,然後的字符串拆成列表,放置在後面

一般的處理過程是:

1. 將切片中索引為 0 的字符賦值給 a

2. 將切片中索引為 1 之後字符再賦值給 s

3. 用 list 函數將字符串轉變為列表

4. 用 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 []

Python3 序列解包