![見出し画像](https://assets.st-note.com/production/uploads/images/146309464/rectangle_large_type_2_2c7d1863e37a036366e4d1033a8f4d27.png?width=1200)
Python勉強記(8): タプルとその仲間たち
タブル(Tuple)とは?
私には聞き慣れない言葉を引いてみることから始めます。
タプル(英: tuple、英語発音: [tʌp(ə)l, tuːp(ə)l]、タプル、トゥープル)とは、複数の構成要素からなる組を総称する一般概念であり、カタカナ語としては主に計算機科学において順序付けられた対象の並びを表すために用いられる。n 個でできた組を英語で「n-tuple」と書くことに由来し、数学では日本語に訳す場合、通常「n 組」とし、タプルの概念そのものも組と呼ばれる。なお、 n-tuple は数学のタプルを意味するほか、同様に double、triple などの拡張として倍数詞の表現にも利用される(詳細は「倍#西洋数学における n 倍を表す表現」を参照)。
前回使用したフィボナッチ数列のPythonコードを再掲します。
def fib(n):
a, b = 0, 1 # 2-tuple
while a < n:
print(a, end=' ')
a, b = b, a + b # 2-tuple
print()
fib(1000)
a, b = 0, 1
これは以下の代入文と等価です。
a = 0
b = 1
利用例
Pythonにおいては、タプルのアンパックを使用して、一度に複数の変数へ値を割り当てることができます。
※以下、実行結果出力は>>行で示すことにします。
a,b,c = (1,2,3) # Unpack (1,2,3) to a, b, c
print(a,c,b)
>> (1, 3, 2)
関数において、複数の値をタプルとしてまとめて返すことが可能です。
def tuple_test():
return 1,2,3,4
print(tuple_test())
>> (1, 2, 3, 4)
タプルの書き方
カンマで値を区切ると、それはタプルとして扱われます。
値は括弧で囲むことも可能です。print()関数でそれを出力すると、値は括弧内に表示されます。
ここではタプルの記述例を示します。
# 0-tuple
()
# 1-Tuple
1,
(1,)
# 2-tuple
1, 2
(1, 2)
# 3-tuple
1, 2,'Hello'
(1, 2, 'Hello')
以下は規則です:
0-タプルを除いて、括弧は省略できますが、明確性のために括弧を使用することを推奨します。
1-タプルは常にカンマで終わる必要があります。
タプルの要素は異なる型の混在が可能です。
操作例
a = 1,2,3
b = 'Hello' # 1-tuple
c = a + b # joint tuples
print(c)
>> (1, 2, 3, 'Hello')
print(c[0])
>> 1
print(c[-1])
>> Hello
print(c[1:2])
>> (2,)
print(c[2:])
>> (3, 'Hello')
print(c[4]) # Error
>> IndexError: tuple index out of range
c[0] = 'a' # Error
>> TypeError: 'tuple' object does not support item assignment
タプルから要素を読み出す方法は以下の通りです。
n番目の要素を取得するには:tuple[n](nが-1の場合は最後の要素を取得します)
部分的な取得(スライス):tuple[m:n]で、mからn番目までの要素を取得します。mを省略すると先頭からn番目まで、nを省略するとm番目から最後までの要素を取得します。
インデックスが範囲外のものを参照すると、エラーが発生します。
タプルの要素は書き換えることができません(エラーが発生します)
タプルの要素は編集できません(エラーが発生します)。ただし、'+'演算子を使用してタプル同士を連結することは可能です。
タプルはイミュータブル(変更不可能)なシーケンス型に分類されます(変更不可能=書き換え不可、シーケンス=順序がある)。
a = (1,2,3)
a += (4,5) # タプルの連結はできる)
pront(a)
>> (1, 2, 3, 4, 5)
a[0] = 99 # エラー
>> TypeError: 'tuple' object does not support item assignment
range
rangeは数値の範囲を示す特別なオブジェクトで、主にforループ内で利用されます。一般的な形式はrange(開始インデックス, 終了インデックス[, ステップ])で、ステップを省略した場合は1として扱われます。
for i in range(0,10):
print(i,end=" ")
>< 0 1 2 3 4 5 6 7 8 9
for i in range(0,10,2): # 刻みを2にする。
print(i,end=" ")
>> 0 2 4 6 8
rangeはタプルと同じく、変更不可能なシーケンス型です。以下の例に示すように、rangeの特定の要素を変更しようとすると、エラーが生じます:
a = range(0, 5) #range a[0..4]
print(a[3])
>> 3
a[3] =10 # Error
>> TypeError: 'range' object does not support item assignment
文字列
学んだ基本型の文字列型は、イミュータブルなシーケンス型であることがわかりました。これは意外な発見でした!文字列の編集は、タプルと同じく、連結することのみが可能です。
a = "abcde"
a += "fgh"
print(a)
>> abcdefgh
print(a[3])
>> 'd'
a[3]='x' # Error
<< TypeError: 'str' object does not support item assignment
(次回へ移転)リスト(list)とは?
この回が大きくなりすぎたため、リストについては次回に回そうと思います。