【Python入門・応用】07.タプル|リストとの違いやタプルの特徴を理解しよう

こんにちは。キノコードです。
この動画では、Pythonのタプルについて説明します。
タプルは、前回のレッスンで学習したリストと同様、データ型のひとつです。
タプルの特徴や扱い方などを学びましょう。
この動画で説明する内容はこちらです。

はじめに、タプルの特徴、作り方について説明します。
次に、タプルの要素へのアクセス方法、タプルが持つ機能を学習しましょう。
タプルはリストととてもよく似ています。
特徴を学ぶことで、リストとタプルの違いも理解していきましょう。

Python学習の「キノクエスト」では、この動画に出てきた内容の問題を解くことができます。
何度も問題を解くことで、Pythonの理解を深めてみませんか?
「キノクエスト」は、月額1,990円で問題が解き放題です。
好きな問題だけを解くことも、間違えた問題だけを解くこともできます。
カリキュラムに沿って問題を解くこともできます。
ご自身に合った学習スタイルを見つけていただけたらと思います。
また、学習に困ったら、コミュニティで仲間に質問をすることもできます。
学習に困っている人の質問に答えることもおすすめです。
詳しくは、概要欄にあるURLをご覧ください。
キノクエストのご登録をお待ちしております!

それではレッスンスタートです。

タプルとは

タプルは、リストとよく似ています。
リストのレッスンでは、変数を箱、リストをロッカーと例えて説明しました。
タプルもリストのようにロッカーに例えることができます。
それぞれの箱のことを要素といいます。
そして、それぞれの要素には、インデックスという場所の情報が割り当てられています。
このインデックスは0からはじまります。
ここまではリストと同じように見えます。
タプルがリストと大きく異なる特徴は、要素の追加、変更、削除ができないという点にあります。
リストには追加や削除のメソッドが多く用意されています。
一方のタプルには、indexメソッドとcountメソッドしか用意されていません。

タプルの作り方

それでは、タプルを作ってみましょう。
書き方の決まりは次のとおりです。
変数 = (データ1,データ2,データ3,...)
このように、タプルは丸括弧を使い、それぞれの要素をカンマで区切って入力します。
実際にコードを見ながら確認していきましょう。 

このコードは、aという変数に、’sato’,'suzuki','takahashi'という3つのデータが入ったタプルを作り、表示するものです。
最初にタプルを代入する変数名を記述します。
イコールを書いて、丸括弧を記述します。
これで要素のないタプルができました。
次にタプルに要素を入れていきます。
それぞれの要素をカンマで区切ることを忘れないようにしましょう。
実行します。

# 01
a = ('sato', 'suzuki', 'takahashi')

print(a)

これでタプルが作成できました。

タプルへのアクセス

作ったタプルの要素にアクセスしてみましょう。
要素にアクセスするにはインデックスを使います。
変数の後に角括弧を付けます。
角括弧の中にインデックスを指定することで、対応したタプルの要素にアクセスできます。
実行してみましょう。

# 02
a = ('sato', 'suzuki', 'takahashi')

print(a[0])
print(a[1])
print(a[2])

sato、suzuki、takahashiがそれぞれ表示されました。

タプルの特徴は、要素の変更や追加、削除ができない点です。
リストでは、このようにインデックスを指定して要素にアクセスし、要素を変更することができました。

# 03
a = ['sato', 'suzuki', 'takahashi']
a[1] = 'tanaka'

print(a)

タプルではどのようになるのか試してみましょう。
実行します。

# 04
a = ('sato', 'suzuki', 'takahashi')
a[1] = 'tanaka'

print(a)

エラーが表示されました。
このように、タプルの要素は変更ができないことがわかりました。

タプルのスライス

また、要素の取得では、開始位置と終了位置のインデックスを指定することができます。
この範囲指定には、コロンを使用します。
終了位置は含まれないことに注意してください。
インデックスの1から4、インデックスの2から、インデックスの2まで、をそれぞれ指定します。
実行してみましょう。

# 05
a = (0, 1, 2, 3, 4, 5)

print(a[1:4])
print(a[2:])
print(a[:2])

それぞれ、1,2,3、2,3,4,5、0,1が表示されました。

また、コロンを2つ重ねると、指定した数でステップして取得することができます。
マイナスの値を指定すると、タプルの後ろからステップして取得できます。
2と-3を指定してみましょう。
実行します。

# 06
a = (0, 1, 2, 3, 4, 5)

print(a[::2])
print(a[::-3])

2を指定すると、0,3,4が取得でき、-3を指定すると、後ろから5,2を取得できました。

タプルのネスト

タプルの中にタプルを入れることもできます。
タプルの中にタプルを入れる場合は、丸括弧の中に丸括弧を書き、そこに代入するデータを記述します。
要素には角括弧を2回使用することでアクセスできます。
satoさんは、1つ目のタプルの、1番目です。よって、0の0です。
suzukiさんは、1つ目のタプルの、2番目です。よって、0の1です。
tanakaさんは、2つ目のタプルの、1番目です。よって、1の0です。
takahashiさんは、2つ目のタプルの、2番目です。よって、1の1です。
実行してみましょう。

# 07 a = (('sato', 'suzuki'), ('takahashi', 'tanaka')) print(a[0][0]) print(a[0][1]) print(a[1][0]) print(a[1][1])

satoさん、suzukiさん、takahashiさん、tanakaさんが表示されました。

タプルの足し算・掛け算

タプルは足し算や掛け算をすることもできます。
まずは足し算を見てみましょう。
aというタプルに別のタプルを足します。
実行します。

# 08
a = ('sato', 'suzuki', 'takahashi')
b = a + ('tanaka', 'sato')

print(b)

このように、tanakaさんとsatoさんが追加されたタプルを作成できました。

掛け算も試してみましょう。
アスタリスクの後ろに整数を入力します。
今回の例では2を入力します。
こうすることでタプルの要素を2回繰り返します。
実行します。

# 09
a = ('sato','suzuki','takahashi') * 2

print(a)

satoさん、suzukiさん、takahashiさんという要素が2回繰り返されたリストができました。

タプルのメソッド

ここからは、タプルの扱い方について説明をします。
はじめにタプルに用意されているメソッドを使ってみましょう。

指定したインデックスの取得 indexメソッド

indexメソッドを使うと、指定した要素が何番目にあるのかを取得することができます。
このコードでは、aというタプルに、satoさんが何番目かを取得してみます。
また、aの要素にはない、tanakaさんが何番目かも試してみましょう。
実行します。

# 10
a = ('sato', 'suzuki', 'takahashi')

print(a.index('sato'))
print(a.index('tanaka'))

1つ目の例の場合、satoさんはインデックスの0番目として登録されているので、「0」が表示されます。
2つ目の例の場合、tanakaさんは存在しないのでエラーが表示されます。

指定した要素の個数を取得 countメソッド

次に、countメソッドを使ってみましょう。
countメソッドを使うと、指定した要素がタプルにいくつあるのかを取得することができます。
aというタプルに、satoさんがいくつあるかを取得してみましょう。
実行します。

# 11
a = ('sato', 'suzuki', 'takahashi', 'sato')

print(a.count('sato'))

satoさんの個数である2を取得することができました。

組み込み関数や演算子でタプルの情報を取得する方法

次に、タプルの情報を取得する方法について説明します。
タプルは、Pythonの組み込み関数や演算子を使うことができます。
組み込み関数とは、よく使う機能などがあらかじめPythonに用意されている関数のことです。
詳しくは別のレッスンで説明をします。もう少々お待ちください。

要素の検索 in演算子

まずは、in演算子を用いて、指定した要素が含まれているかどうかを検索してみましょう。
検索したい要素を書き、in、そして検索対象となるタプルを指定します。
この例では、aというタプルの中にsatoさん、tanakaさんが含まれているかどうかを検索しています。
要素が存在する場合は「True」が返され、存在しない場合は「False」が返されます。
実行します。

# 12
a = ('sato', 'suzuki', 'takahashi')

print('sato' in a)
print('tanaka' in a)

実行結果から、satoさんはタプルに存在し、tanakaさんはタプルに存在しないことがわかりました。

並び替え sorted関数

組み込み関数のsorted関数を使用して、タプルの要素を並び替えてみましょう。
実行します。

# 13
a = (8, 5, 3, 1, 9, 6)

print(sorted(a))

要素の数値が小さい順に並び替えられました。

大きい順に並べ替えることもできます。
その場合はsorted関数の第二引数にreverse=Trueと書きます。
実行します。   

# 14
a = (8, 5, 3, 1, 9, 6)
a = sorted(a, reverse=True)

print(a)

これで大きい順に並べ替えることができました。

最大値、最小値の取得 max,min

max関数、min関数を使用することで、タプルの最大値、最小値を取得することができます。
実行します。

# 15
a = (8, 5, 3, 1, 9, 6)

print(max(a))
print(min(a))

最大値と最小値を取得することができました。

タプルへの変換

最後に、他のデータ型のオブジェクトを、タプルに変換する方法を紹介します。
タプルへの変換には、tuple関数を使用します。
まず、変数l(エル)に、リストを代入します。
作成したリストを、tuple関数で変換しましょう。
データ型も確認します。
実行します。

# 16
l = ['a', 'b', 'c']
a = tuple(l)

print(a)
print(type(a))

リストをタプルに変換することができました。

次に、文字列をタプルに変換してみましょう。
先ほどと同様に表示をして、データ型も確認してみましょう。
実行します。

# 17
s = 'python'
a = tuple(s)

print(a)
print(type(a))

文字列の1文字ずつが要素となるタプルを作成できました。

おわりに

さて、レッスンは以上です。
リストとタプルについて、共通点や相違点の理解はできましたでしょうか?
Python学習サービスの「キノクエスト」では、ここで説明した問題を解くことができます。
月額1,990円で問題解き放題、コミュニティもセットになっています。
詳細は概要欄のURLからご確認ください。
キノクエストへのご登録をお待ちしております!

それでは、最後に少しおさらいしましょう。
リストとタプルの共通点は、複数のデータを持つデータ型です。
また、インデックスという順番を使って処理をすることができます。
このように、複数の要素をインデックスで処理できるデータ型を、シーケンス型と言います。

そして、リストとタプルの大きな違いは、要素の変更ができるかできないかにあります。
リストは要素の変更や追加、削除ができます。
変更ができるので、ミュータブルなオブジェクトと言われます。
一方のタプルは変更ができません。
変更ができないので、イミュータブルなオブジェクトと言われます。

用語まで覚える必要はありませんが、学習している中で目にする用語です。
頭の片隅に置いておいていただけるとよいかなと思います。