コンテンツ

Python速習ガイド - ステップ1 基本的な文法とデータ型 (8) - タプル

Info
  • 本講座は、Pythonプログラミングの基礎を手を動かしながら最速で身につけるための講座です。
  • 「スタイルガイド」では、Pythonできれいなコードを書くためのガイドライン(PEP8)で紹介されている内容を主に記載しています。
  • 各コードは実行して結果を確認することができます。
    ページの再読み込みで元の内容に戻りますので、自由にいじってみてください。

「ステップ1 基本的な文法とデータ型」の続きです。

データをまとめるデータ型として、リストの他にも タプル (tuple) があります。
タプルはリストとは異なり、一度作成すると要素を変更できない(イミュータブル)という重要な特徴があります。

  • タプルは丸括弧((, ))内に要素をカンマ(,)区切りで並べて作成します。
  • 要素が1つだけのタプルを作成する場合は、要素の後ろにカンマ(,)をつける必要があります。
  • 丸括弧は省略することもできます。
  • 空のタプルは () で作成します。

タプルの最も重要な特徴は イミュータブル(変更不可) であることです。
一度作成したタプルの要素は変更、追加、削除できません。

  • タプル自体はイミュータブルですが、タプル内に格納された変更可能(ミュータブル)なオブジェクトの内容は変更可能であることに注意してください。
    • これまでに登場したデータ型のうち、ミュータブルな型はリストのみです。

タプルはリストと同様に以下の操作ができます:

  • インデックスによる要素取得 tuple[0]
  • 長さの取得 len(tuple)
  • 存在チェック x in tuple
  • スライス tuple[1:3]
  • アンパック x, y = tuple

タプルはイミュータブルなため、リストと比べてメソッドが少なく、要素を変更するメソッドはありません。

  • 位置番号取得 tuple.index(x)
  • 個数取得 tuple.count(x)
  • タプルは list 関数を使ってリストに変換できます。
  • リストは tuple 関数を使ってタプルに変換できます。

タプルはリストと同様に以下の関数が適用可能です:

  • min(tuple)max(tuple):最小値、最大値の取得
  • sum(tuple):数値の合計を計算
  • sorted(tuple):要素をソートした結果をリストとして返す
  • all(tuple), any(tuple): タプル内の真偽値をチェック

sorted関数の戻り値がリストであることに注意が必要です。
(タプルが欲しい場合はtuple関数で変換します。)

タプルとリストはどちらも複数の要素をまとめるデータ型ですが、それぞれ異なる特性と用途があります。

  • タプル を使うのが適切な場合:

    • 作成後に変更する予定がないデータ (例: 座標、曜日名のセット)
    • データの不変性を保証したい場合
    • 辞書のキーとして使用する場合 (後で学習します)
  • リスト を使うのが適切な場合:

    • 要素の追加、削除、変更がある場合
    • データが動的に変化する場合
タプルとリストのパフォーマンス
タプルはイミュータブルなため、リストよりもメモリ使用量が少なく、処理が高速になる場合があります。
変更の必要のないデータ構造では、タプルを使用しましょう。
  • リストと同様に、タプルにbool関数を適用すると、空のタプル(())の場合にFalse、それ以外にTrueを返します。

ここまで見てきたタプルに関する操作について、練習問題を解いてみましょう。

📚練習問題1: タプルの基本操作

RGB(赤、緑、青)の色情報を表すタプルを操作するプログラムを作成しましょう。

  1. RGB値(255, 0, 0)(赤色)を表すタプルredを作成してください
  2. RGB値(0, 255, 0)(緑色)を表すタプルgreenを作成してください
  3. RGB値(0, 0, 255)(青色)を表すタプルblueを作成してください
  4. 3つの色から成るタプルprimary_colorsを作成してください
  5. primary_colorsの2番目の要素(緑色)を表示してください
  6. blueタプルの青の値(最後の要素)を取得して表示してください
  7. primary_colorsの長さを表示してください
解答例
📚練習問題2: タプルとリストの変換

週の曜日を表すタプルを作成し、それをさまざまな方法で操作してみましょう。

  1. 月曜から日曜までの曜日名(英語)をタプルweekdaysに格納してください
  2. 土曜と日曜だけを含むweekendタプルを作成してください(インデックス指定でweekdaysから抽出)
  3. weekdaysをリストに変換し、weekdays_list変数に格納してください
  4. weekdays_listに「Holiday」という要素を追加してください
  5. weekdays_listをタプルに戻し、new_weekdays変数に格納してください
  6. 元のweekdaysと新しいnew_weekdaysの長さをそれぞれ表示してください
解答例
📚練習問題3: タプルのアンパック

大学生の情報(学生番号、名前、学年、専攻)が格納されたタプルから、必要な情報を抽出してみましょう。

  1. 学生情報として (12345, "山田太郎", 3, "情報科学") を格納したタプル student を作成してください
  2. アンパックを使って学生番号、名前、学年、専攻をそれぞれ別々の変数に代入してください
  3. アンパックを使って学生番号、名前とその他の情報を分離してください
  4. 学生の名前と専攻だけを取り出し、学生番号と学年は無視するようなアンパックを行ってください
  5. 取り出した情報をそれぞれ表示してください
解答例

関連記事