Python Language デストラクションの割り当て


代入では、 "unpacking"構文を使用してIterableを値に分割できます。

値としての破壊

a, b = (1, 2)
print(a)
# Prints: 1
print(b)
# Prints: 2

iterableの長さを超えて解凍しようとすると、エラーが発生します:

a, b, c = [1]
# Raises: ValueError: not enough values to unpack (expected 3, got 1)
Python 3.x 3.0

リストとしての破壊

次の構文を使用して、未知の長さのリストをアンパックすることができます。

head, *tail = [1, 2, 3, 4, 5]

ここでは、最初の値をスカラーとして抽出し、他の値をリストとして抽出します。

print(head)
# Prints: 1
print(tail)
# Prints: [2, 3, 4, 5]

これは次のものと同等です:

l = [1, 2, 3, 4, 5]
head = l[0]
tail = l[1:]

また、複数の要素または要素がリストの最後を形成して動作します。

a, b, *other, z = [1, 2, 3, 4, 5]
print(a, b, z, other)
# Prints: 1 2 5 [3, 4]

割り当てを破棄する際の値を無視する

特定の値だけに興味がある場合は、 _を使用して興味のないことを示すことができます。注:これはまだ設定されています_ 、ほとんどの人は変数として使用しません。

a, _ = [1, 2]
print(a)
# Prints: 1
a, _, c = (1, 2, 3)
print(a)
# Prints: 1
print(c)
# Prints: 3
Python 3.x 3.0

割り当てを破棄する際にリストを無視する

最後に、代入で*_構文を使用して多くの値を無視できます。

a, *_ = [1, 2, 3, 4, 5]
print(a)
# Prints: 1

これは本当に興味深いものではありません。リスト上でインデックスを使用することができます。最初の値と最後の値を1つの割り当てで保持するのがうまくいけば:

 a, *_, b = [1, 2, 3, 4, 5]
 print(a, b)
 # Prints: 1 5

一度に複数の値を抽出することもできます。

 a, _, b, _, c, *_ = [1, 2, 3, 4, 5, 6]
 print(a, b, c)
 # Prints: 1 3 5