このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Python入門】その他の便利なタプルの操作

その他の便利なタプルの操作

 タプルは不変なシーケンス型として、リストや文字列と同様の操作が可能です。しかし、一度作成すると内容を変更できないため、要素の追加や削除は行えません。その代わり、タプルには連結や繰り返し、サイズの取得、最小・最大の値の抽出、要素の出現回数や位置の検索といった、シーケンス全般で利用できる便利な演算子や関数、メソッドが用意されています。ここでは、これらの操作を具体例や表を交えて解説し、タプルの扱いをさらに深める方法について説明します。

プログラムのダウンロード

 「ダウンロード」から、JupyterLab で実行できるサンプルプログラムがダウンロードできます。ファイルは、ESET Endpoint Securityでウイルスチェックをしておりますが、ダウンロードとプログラムの実行は自己責任でお願いいたします。

1.タプルの演算子による操作

 タプル同士の連結や複製は、演算子を使ってシンプルに実現できます。以下の例では、文字列要素からなるタプルを用いて連結と複製の動作を確認します。

1.1. 連結と複製

 連結演算子(+)を用いると、2つのタプルをひとつにまとめることができます。また、乗算演算子(*)を用いると、タプル内の要素を指定回数繰り返す新しいタプルが生成されます。

サンプルプログラム

# 2つのタプルを定義
tuple_a = ('Red', 'Green', 'Blue')
tuple_b = ('Cyan', 'Magenta')

# タプルの連結(+演算子)
combined = tuple_a + tuple_b
print("連結したタプル:", combined)
# 出力例: 連結したタプル: ('Red', 'Green', 'Blue', 'Cyan', 'Magenta')

# タプルの複製(*演算子)
repeated = tuple_a * 2
print("複製したタプル:", repeated)
# 出力例: 複製したタプル: ('Red', 'Green', 'Blue', 'Red', 'Green', 'Blue')

出力結果

連結したタプル: ('Red', 'Green', 'Blue', 'Cyan', 'Magenta')
複製したタプル: ('Red', 'Green', 'Blue', 'Red', 'Green', 'Blue')

解説

  • tuple_a + tuple_b は、2つのタプルの要素を先頭から順に連結し、新しいタプルを作成します。
  • tuple_a * 2 は、tuple_a の内容を2回繰り返したタプルを生成します。
  • また、乗算の順序は整数 * タプルでも同じ結果となります。

1.2. 長さ、最小値、最大値の取得

 タプルはシーケンスであるため、len()min()max() といった組み込み関数を利用して、要素数や最小・最大の値を簡単に求めることができます。ここでは数値が格納されたタプルを例に示します。

サンプルプログラム

# 数値が格納されたタプルを定義
scores = (88, 75, 92, 85, 92)

# タプルの要素数を取得
count = len(scores)
print("要素の個数:", count)
# 出力例: 要素の個数: 5

# タプル内の最小値と最大値を取得
lowest = min(scores)
highest = max(scores)
print("最小値:", lowest)   # 出力例: 最小値: 75
print("最大値:", highest)  # 出力例: 最大値: 92

出力結果

要素の個数: 5
最小値: 75
最大値: 92

解説

  • len(scores) はタプル内の要素数(この例では5)を返します。
  • min(scores)max(scores) は、数値の大小関係に基づいて、最小値と最大値をそれぞれ返します。

下記の表は、タプルの演算子および関数の基本的な使い方とその効果をまとめたものです。

使い方コード例結果例
タプルA + タプルB('Red', 'Green') + ('Blue',)('Red', 'Green', 'Blue')
タプル * 整数('Yellow',) * 3('Yellow', 'Yellow', 'Yellow')
len(タプル)len((1, 2, 3))3
min(タプル)min((4, 1, 7))1
max(タプル)max((4, 1, 7))7

2.タプルのメソッドによる操作

 タプルはイミュータブルであるため、要素の追加や削除はできませんが、特定の値の出現回数を数えたり、最初に現れる位置を調べるためのメソッドが用意されています。

2.1. countメソッドの利用

 count メソッドは、タプル内で指定した値が何回出現するかを返します。以下の例では、数値のタプルにおける特定のスコアの出現回数を調べます。

サンプルプログラム

# 数値が格納されたタプルを定義
grades = (85, 90, 85, 70, 90, 85)

# 85の出現回数を数える
occurrences = grades.count(85)
print("85の出現回数:", occurrences)
# 出力例: 85の出現回数: 3

出力結果

85の出現回数: 3

解説

  • grades.count(85) は、タプル grades 内で値 85 が何回現れるかを数え、結果として 3 を返します。

2.2. indexメソッドの利用とエラーハンドリング

 index メソッドは、指定した値が最初に出現する位置(インデックス)を返します。なお、検索範囲を指定することも可能ですが、指定した値が存在しない場合は ValueError が発生します。

サンプルプログラム

# 数値が格納されたタプルを定義
temperatures = (23, 27, 21, 27, 25)

# 27の最初に現れるインデックスを取得
first_index = temperatures.index(27)
print("27の最初のインデックス:", first_index)
# 出力例: 27の最初のインデックス: 1

# 開始位置と終了位置を指定して検索する例
partial_index = temperatures.index(27, 2, 5)
print("インデックス2から5の間での27の位置:", partial_index)
# 出力例: インデックス2から5の間での27の位置: 3

# 存在しない値を検索してエラーを処理する例
try:
    not_found = temperatures.index(30)
except ValueError as error:
    print("エラーが発生しました:", error)
# 出力例: エラーが発生しました: tuple.index(x): x not in tuple

出力結果

27の最初のインデックス: 1
インデックス2から5の間での27の位置: 3
エラーが発生しました: tuple.index(x): x not in tuple

解説

  • temperatures.index(27) は、タプル内で値 27 が最初に現れる位置(インデックス 1)を返します。
  • temperatures.index(27, 2, 5) は、インデックス2からインデックス5までの範囲で検索し、値 27 が見つかる最初の位置(インデックス 3)を返します。
  • 存在しない値の場合、ValueError が発生するため、例外処理を用いることでプログラムが途中で停止しないようにしています。

 以下の表は、タプルに適用できる代表的な演算子、関数、メソッドとその効果を整理したものです。

使い方結果
タプルA + タプルBタプルAとタプルBを連結したタプル
タプル * 整数要素を指定回数複製したタプル
整数 * タプル要素を指定回数複製したタプル
len(タプル)タプルの要素数
min(タプル)タプルの中で最小の値
max(タプル)タプルの中で最大の値
タプル.count(値)指定した値と一致する要素の個数
タプル.index(値)指定した値が最初に現れるインデックス(範囲指定可)

まとめ

 タプルはイミュータブルな性質を持つため、要素の変更はできませんが、連結や繰り返し、サイズの取得、最小値・最大値の抽出、さらには特定の値の出現回数や位置の検索など、シーケンスとして非常に便利な操作が可能です。これらの演算子、関数、メソッドを活用することで、タプルをより効率的に扱い、読みやすいコードを書くことができます。

次のステップでは、階層的なデータ構造を作る方法について詳しく解説していきます。