メインコンテンツへスキップ
  1. 第02講 基本データ型(1/2; リスト,タプル)/

リストとタプル

リスト タプル コレクション
目次

リスト(配列)
#

教科書 p.94(Lesson 5)

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

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

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

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

タプル
#

教科書 p.138(Lesson 6)

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

>>> tuple = (1, 2, 3, 4, 5) # tupleという変数に1から5までの整数をタプルとして代入する.
>>> tuple # list の中身を出力する.
(1, 2, 3, 4, 5)
>>> len(tuple) # tuple の要素数を出力する.
5
>>> tuple[1] # tuple の1番目の要素を出力する.インデックスは0から始まる.
2
>>> # tuple[0] = 10 # tuple の要素は変更できない.
>>> 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(値) を用います. ただし,指定するが複数リスト名に存在する場合,最初に見つかった要素のみが削除される点に注意してください.

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

連結とスライス
#

教科書 p.113(Lesson 5)

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

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

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

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

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

教科書 p.141(コラム)

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