↓ メインコンテンツへスキップ
  1. 第01講 プログラミングAの復習、基本データ型(1/2; リスト、タプル)/

リストとタプル

リスト(配列)
#

教科書 p.94(Lesson 5)

プログラムを書く上で、複数のデータをまとめて扱うことがよくあります。 このような場合、コレクションと呼ばれるデータ構造を用います。 コレクションには、リスト、セット、ディクショナリなどのデータ構造がありますが、ここではリストについて説明します。

リストは複数のデータを順序付けて格納するデータ構造です。 リストは角括弧 [] で囲み、リストに格納する各データ(要素)はカンマ , で区切ります。

>>> num_list = [1, 2, 3, 4, 5] # num_list という変数に1から5までの整数をリストとして代入する。
>>> num_list         # num_list の中身を出力する。
[1, 2, 3, 4, 5]
>>> len(num_list)    # num_list の要素数を出力する。
5
>>> num_list[1]      # num_list の1番目の要素を出力する。インデックスは0から始まる。
2
>>> num_list[0] = 10 # num_list の0番目の要素を10に変更する。
>>> num_list
[10, 2, 3, 4, 5]     # num_list の最初の要素が 10 に書き換わっている。

リスト内の各データを要素と呼び、リストの要素数はlen関数を用いて取得します。 リスト内の要素を参照するには num_list[インデックス] と表記します。インデックスは0から始まります。 リストの要素には、整数、浮動小数点数、文字列、リストなど、様々なデータ型を格納することができます。

タプル
#

教科書 p.138(Lesson 6)

タプルはリストと同じように複数のデータをまとめて扱うデータ構造ですが、 リストのように、要素の変更はできません。 タプルは丸括弧 () で囲み、タプルに格納する各データ(要素)はカンマ , で区切ります。

>>> num_tuple = (1, 2, 3, 4, 5) # num_tuple という変数に1から5までの整数をタプルとして代入する。
>>> num_tuple           # num_tuple の中身を出力する。
(1, 2, 3, 4, 5)
>>> len(num_tuple)      # num_tuple の要素数を出力する。
5
>>> num_tuple[1]        # num_tuple の1番目の要素を出力する。インデックスは0から始まる。
2
>>> # num_tuple[0] = 10 # num_tuple の要素は変更できない。
>>> num_tuple
(1, 2, 3, 4, 5)

要素数が空のタプルを作成する場合は、() または tuple() を用います。 要素数が1つのタプルを作成する場合は、(1,) のようにカンマ , を付けます。単なる(1)だと数式の括弧と区別がつかないためです。

>>> empty_tuple = () # 空のタプルを作成する。
>>> empty_tuple
()
>>> one_element_tuple = (1,) # 要素数が1つのタプルを作成する。
>>> one_element_tuple
(1,)

リストとタプルの操作
#

要素の追加、削除
#

教科書 p.104(Lesson 5) 教科書 p.106(Lesson 5)

タプルは変更できないため、要素の追加、削除を行うとエラーが発生します。 リストの最後に要素を追加する場合、リスト名.append(値) を用います。 また、リストの好きな位置に要素を追加する場合、リスト名.insert(位置, 値) を用います。

リストの要素を削除したい場合、インデックス番号を指定する方法と値を指定する方法があります。 インデックス番号で指定して要素を削除する場合、del文を用いて del リスト名[インデックス] とします。 一方、値を指定して要素を削除する場合、リスト名.remove(値) を用います。 ただし、指定する値が複数リスト名に存在する場合、最初に見つかった要素のみが削除される点に注意してください。

>>> items = ['a', 'b', 'c', 'd', 'e']
>>> items.append('a')      # items の最後に'a'という要素を追加する。
>>> items
['a', 'b', 'c', 'd', 'e', 'a']
>>> items.insert(1, 'A')   # items の2番目に'A'という要素を追加する。
>>> items
['a', 'A', 'b', 'c', 'd', 'e', 'a']
>>> del items[1]           # items の2番目の要素を削除する。
>>> items
['a', 'b', 'c', 'd', 'e', 'a']
>>> items.remove('a')      # items の最初に見つかった'a'という要素を削除する。
>>> items
['b', 'c', 'd', 'e', 'a'] # 2つあった'a'のうち最初に見つかったものが削除される。
  • リストの最後に要素を追加する。リスト名.append(値)
  • リストの好きな位置に要素を追加する。リスト名.insert(位置, 値)
  • リストの要素をインデックス番号で指定して削除する。del リスト名[インデックス]
  • リストの要素を値で指定して削除する。リスト名.remove(値)

連結とスライス
#

教科書 p.113(Lesson 5)

リスト同士を連結する場合、+ 演算子、または extend メソッドを用います。 + 演算子を用いると、新しいリストが生成されますが、extend メソッドを用いると、元のリストに追加されます。

>>> items1 = [1, 2, 3]
>>> items2 = [4, 5, 6]
>>> items3 = items1 + items2 # items1 と items2 を連結して新しいリストを生成する。
>>> items3
[1, 2, 3, 4, 5, 6]
>>> items1 # items1 は影響なし。
[1, 2, 3]
>>> items1.extend(items2)   # items1 に items2 を追加する。
>>> items1                  # items1 に items2 が追加される。
[1, 2, 3, 4, 5, 6]

リストの一部を取り出す場合、スライスを用います。 スライスは リスト名[開始位置:終了位置:間隔] と表記します。

>>> items = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> items[5:]     # items の5番目以降の要素を取り出す。
[5, 6, 7, 8, 9]
>>> items[:5]     # items の5番目までの要素を取り出す。
[0, 1, 2, 3, 4]
>>> items[::2]    # items の2つおきの要素を取り出す。
[0, 2, 4, 6, 8]
>>> items[::-1]   # 間隔を負にすると逆順になる。
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> del items[5:] # items の5番目以降の要素を削除する。
>>> items
[0, 1, 2, 3, 4]
  • リストを連結する。
    • +演算子でリストを連結すると新しいリストが作成されます。
    • リスト1.extend(リスト2)でリストを連結するとリスト1にリスト2が追加されます。
  • リストの一部を取り出すにはスライス(リスト名[開始位置:終了位置:間隔])を用いる。
    • 開始位置 を省略すると0が指定されたことになります。
    • 終了位置 を省略するとリストの最後まで取り出されます。
    • 間隔 を省略すると1が指定されたことになります。
    • スライスを用いて要素をまとめて削除することもできます。

リストとタプルの使い分け
#

教科書 p.141(コラム)

タプルは変更できないため、変更が必要な場合はリスト、そうでない場合はタプルを用います。 一般的な使い方では、タプルには異なる型のデータを格納することが多く、要素へのインデックスでのアクセスやアンパックを行うことが多いです。 一方で、リストは同じ型のデータを格納することが多いです。 そのため、繰り返し処理やスライスなど複数の要素へのアクセスが多い場合に用いらることが多いです。