Python 3シーケンス解包


Pythonには実用的な文法糖がたくさんあります.これらの文法糖はコードを簡略化し、理解しやすいなどの利点を助けることができます.次に、Python 3の中で特に実用的な文法配列解包(配列解包は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.リスト関数で文字列をリストに変換
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 []