🥜

【Python】タプルについてまとめてみた

2025/01/17に公開

【Python】タプルについてまとめてみた

先日、Python3 エンジニア認定基礎試験を受験し、無事合格しました!
記事:Python3 エンジニア認定基礎試験合格体験記:実践した試験対策について

試験勉強中に「タプル」という私にとって初めての概念に出会いました。(多分、JavaScript などで実際に使ったことはあるが、タプルという言葉を知らなかった 😓)。今回はその備忘録として、Python のタプルについてリストと対比しながらまとめてみたいと思います。


Python タプルの特徴

タプルは Python で使えるデータ型の一つで、以下の特徴があります:

  • イミュータブル(不変):一度作成すると、その内容を変更することができません。
  • 複数の異なるデータ型を格納可能:整数、文字列、リストなどを混在して格納できます。
  • 丸括弧で定義:基本的にタプルは()で囲んで作成します。

基本的なコード例

# タプルの作成
tuple1 = (1, 2, [3, 4])  # 可変要素(リスト)を含むタプル
tuple2 = ("hello", "world")  # 不変要素のみを含むタプル

# 要素へのアクセス
print(tuple1[0])  # 出力: 1
print(tuple2[1])  # 出力: world

# タプル自体の変更はエラー(タプルは不変)
# 実行すると以下のエラーが発生します:
# TypeError: 'tuple' object does not support item assignment

# ネストされたリストの変更は可能(タプル自体は不変だが、リストは可変)
tuple1[2][1] = "four"
print(tuple1)  # 出力: (1, 2, [3, "four"])

以上のように、タプルは不変で、整数、文字列、リストなどを混在して格納できます。

タプルかどうかを見分けるポイント

基本的にタプルは()丸括弧で定義しますが、実は丸括弧なしのタプルも存在します。
タプルとして認識される場合と認識されない場合の例を以下に示します:

タプルとして認識される例

# カンマ区切りの値(括弧あり)
example1 = (1, 2, 3)
print(type(example1))  # 出力: <class 'tuple'>

# カンマ区切りの値(括弧なし)
example2 = 1, 2, 3
print(type(example2))  # 出力: <class 'tuple'>

# 要素が1つでも、末尾にカンマがある場合
example3 = (1,)
print(type(example3))  # 出力: <class 'tuple'>

タプルとして認識されない例

# 括弧があるがカンマがない場合
not_a_tuple1 = (1)
print(type(not_a_tuple1))  # 出力: <class 'int'>

# 要素が1つでカンマがない場合
not_a_tuple2 = 1
print(type(not_a_tuple2))  # 出力: <class 'int'>

基本は()丸括弧ですが、参考までに覚えておきたいです。


おまけ:Python タプルの応用的な使い方

タプルは、以下のような場面で特に役立ちます:

1. 関数の戻り値としての利用

関数から複数の値を返すとき、タプルを使うと便利です。

def cal(x, y):
    return x + y, x * y

result = cal(3, 4)
print(result)       # 出力: (7, 12)
print(result[0])    # 出力: 7
print(result[1])    # 出力: 12

2. アンパック(Unpacking)の活用

タプルを分解して複数の変数に代入できます。

# タプルのアンパック
x, y, z = (10, 20, 30)
print(x)  # 出力: 10
print(y)  # 出力: 20
print(z)  # 出力: 30

# *を使ったアンパック
numbers = (1, 2, 3, 4, 5)
a, *b, c = numbers # *bのように書くとまとめて取得可能

print(a)  # 出力: 1
print(b)  # 出力: [2, 3, 4]
print(c)  # 出力: 5

Python リストの特徴

リストも Python でよく使われるデータ型です。以下がリストの主な特徴です:

  • ミュータブル(可変):要素の追加、削除、変更が可能です。
  • 複数の異なるデータ型を格納可能
  • 角括弧で定義:リストは[]で囲んで作成します。

基本的なコード例

# リストの作成
list1 = [1, 2, [3, 4]]

# 要素の変更
list1[0] = "one"
print(list1)  # 出力: ["one", 2, [3, 4]]

# 要素の追加
list1.append("five")
print(list1)  # 出力: ["one", 2, [3, 4],"five"]

# 要素の削除
list1.pop(1)
print(list1)  # 出力: ["one",[3, 4],"five"]

リストは柔軟性が高く、データの操作が頻繁に必要な場面で特に有用です。


タプルとリストの共通点・相違点まとめ

共通点

  • 異なるデータ型を格納できる。
  • 要素へのインデックスアクセスが可能。
  • ネストされた構造(リストやタプルを要素に含む)が可能。

相違点

特徴 タプル リスト
可変性 不変(イミュータブル) 可変(ミュータブル)
定義方法 ()を使用 []を使用
用途 固定データの保持 動的データの操作

用途や状況によって、タプルとリストを使えるようになりたいですね!

GitHubで編集を提案

Discussion