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

Python3 序列解包

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

即每次取出第一個作為首,然後的字串拆成列表,放置在後面
一般的處理過程是:
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 []


————————————————

原文連結:https://blog.csdn.net/yilovexing/article/details/80576788