Pythonでタプルをアンパック
この記事では、Pythonにおけるタプルアンパックの様々な方法と、その応用について解説します。複数の変数への同時代入、イテラブルのアンパック、スター演算子(*)、その他高度なテクニックを紹介します。
目次
タプルとは?
タプルは、複数の値を一つの変数に格納できる、変更不可のシーケンス型です。リストと似ていますが、要素の変更ができないという点が大きく異なります。タプルは丸括弧`()`で定義します。
my_tuple = (1, 2, 'apple', True)
print(my_tuple) # 出力: (1, 2, 'apple', True)
タプルの要素にアクセスするには、インデックスを使用します。インデックスは0から始まります。
基本的なタプルアンパック
タプルアンパックとは、タプルの要素を複数の変数に同時に代入することです。変数の数は、タプルの要素の数と一致する必要があります。
a, b, c, d = (10, 20, 30, 40)
print(a, b, c, d) # 出力: 10 20 30 40
x, y = (1,2)
print(x,y) # 出力 1 2
アンパックは、タプルリテラルだけでなく、タプルを返す関数などからも可能です。
イテラブルのアンパック
タプルだけでなく、リストや文字列などのイテラブルなオブジェクトもアンパックできます。
my_list = [1, 2, 3]
a, b, c = my_list
print(a, b, c) # 出力: 1 2 3
my_string = "abc"
x, y, z = my_string
print(x, y, z) # 出力: a b c
ただし、変数の数とイテラブルの長さが一致する必要があります。
スター演算子(*)
スター演算子(*)を使用すると、タプルの一部をアンパックせずに残りの要素をアンパックできます。
a, *b = (1, 2, 3, 4, 5)
print(a) # 出力: 1
print(b) # 出力: [2, 3, 4, 5]
*a, b = (1, 2, 3, 4, 5)
print(a) #出力: [1,2,3,4]
print(b) #出力:5
この例では、最初の要素`a`に1が代入され、残りの要素はリスト`b`に格納されます。スター演算子は、可変長引数を受け取る関数などでも使用されます。
アンパックの応用例
タプルアンパックは、コードを簡潔で読みやすくするのに役立ちます。特に、複数の値を返す関数と組み合わせると効果的です。
# 複数の値を返す関数
def get_coordinates():
return 10, 20
x, y = get_coordinates()
print(x, y) # 出力: 10 20
この例では、`get_coordinates()`関数は、x座標とy座標を返すタプルを返します。アンパックによって、これらの値を個別の変数に簡単に代入できます。
注意点
タプルアンパックを使用する際の注意点です。
- 変数の数は、アンパックするタプルの要素の数と一致させる必要があります。
- 要素数が合わない場合、ValueErrorが発生します。
- スター演算子(*)は、一度のアンパックで複数使用することはできません。