本記事では list と tuple について徹底解説していきます。
また本記事の説明は、公式サイトを大きく参考にしています。以下の記事も併せてご参照ください。
list, tuple について簡単な説明
list, tuple は Python の組み込み関数の一つです。本記事では組み込み関数(class 型)と説明しています。詳しくは以下の記事を参考にしてください。
list と tuple の共通点は複数のデータを保持することが特徴です。相違点はメソッドの数です。list はデータを追加したり、削除したりすることができますが、tuple は追加や削除といった機能がありません。そのため、データについて様々な操作を行いたい場合は list が有効で、計算時間を早くしたいときや最初に定義したデータを変更したくない場合は tuple が有効です。また記事によっては list, tuple のことを単に「配列」と呼ぶサイトがあります。また配列に入っているデータのことを「要素」と呼びます。
list の使い方
空リストの作成
list の記述方法は以下の通りです。
list()
また、単に以下の形で表されます。
[]
これらをインスタンスとして定義して、Jupyter Notebook に出力させてみます。以下のコードを実行してみてください。このサイトをはじめからご覧になっている方は、Jupyter Notebook のファイル名を「list_tuple_practice」としてファイルを作成してください。
実行するコードは以下の通りです。
list_clf = list()
list_clf
square_brackets = []
square_brackets
実行すると以下の結果が出力されます。
要素の入ったリスト
次に要素の入ったリストを作成します。要素の入ったリストを作成する方法は複数ありますが、今回は要素を区切るだけでできるリストの作成方法について説明します。残りの作成方法は後日公開予定です。
リストの作成例は以下の通りです。
[要素1, 要素2, 要素3, ・・・]
Jupyter Notebook で実行してみましょう。以下のコードを実行してみてください。
list_input_num = [1, 2, 4, 10]
list_input_num
Jupyter Notebook でコードを実行すると、以下の結果が出力されます。
この結果より、要素の入ったリストのインスタンスが生成されました。
要素の取り出し、切り出し
list の中の要素は、要素が保存されている場所を指定すると取り出すことができます。具体的には以下のように取り出します。
リストのインスタンス[インデックス番号]
インデックス番号というのは、要素が保存されている場所のことです。要素のインデックス番号の対応表は以下のようになります。取り出し方がわからなくなった際には以下の表を参考にしてください。
「要素の入ったリスト」で説明した「list_input_num」変数を使って実際に要素を取り出してみます。以下のコードを実行してみてください。
list_input_num[0]
list_input_num[1]
list_input_num[-1]
list_input_num[-2]
Jupyter Notebook でコードを実行した結果は以下のようになります。
配列の取り出しは、確かにインデックス番号の取り出し方の通りに取り出せています。
リストでは、特定の範囲の要素を切り出すことも可能です。以下のように取り出します。
リストのインスタンス[開始するインデックス : 終了するインデックス : 何個おきに取り出すか]
以下の表を例にして考えます。
以下のように指定したすると、要素 2-3 まで取り出せます。
リストのインスタンス[1 : 3] # 何個おきに取り出すかを指定しなかった場合、自動的に一つおきに切り抜かれます。
「要素の入ったリスト」で説明した「list_input_num」変数を使って実際に要素を切り出してみます。インデックス番号の 1, 2 番を切り出してみましょう。以下のコードを実行してみます。
list_input_num[1 : 3] # ステップ数を記入しなかった場合、自動的に省略することができます。
実行結果は以下のようになります。
インデックス番号の 1, 2 番が切り出せたことが確認できました。
次に list の要素を 1 つおきに取り出してみます。以下のコードを実行してみます。
list_input_num[ : -1 : 2] # 開始するインデックスを記入しなかった場合、自動的にインデックス番号は 0 と入力されます。
list_input_num[ : : 2] # 終了するインデックスを記入しなかった場合、自動的に -1 が入力されます。
コードを実行すると、以下の結果が出力されます。
list でよく使用するメソッド
copy
リストの要素をコピーするときに使うコードです。以下のように記述します。
変数名 = コピーしたいリスト名.copy()
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = ["A", "B"]
list_1_copy = list_1.copy()
list_1_copy
実行結果は以下の通りになります。
またコピーは以下のように記述しても同様の結果が得られます。
変数名 = list(コピーしたいリスト名)
変数名 = コピーしたいリスト名[:]
extend
あるリストに別のリストを追加することができます。以下のように記述します。
追加したいリスト名.extend(追加するリスト名)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = [1, 2, 3, 4, 5]
list_2 = [2, 1]
list_1.extend(list_2)
list_1
実行結果は以下の通りになります。
元あった list_1 は上書きされてしまいますので、注意してください。元のリストを保持したい場合は copy を使って保存して下さい。また extend は以下のコードでも同様の処理を行うことが可能です。
list_1 += list_2
append
リストに要素を追加することができます。以下のように記述します。
追加したいリスト名.append(追加する要素)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = [1, 2]
list_1.append(3)
list_1
実行結果は以下の通りになります。
元あった list_1 は上書きされてしまいますので、注意してください。元のリストを保持したい場合は copy を使って保存して下さい。また、追加は一つずつしかできませんので、そちらも注意してください。複数の値を append する方法は後日解説します。
insert
リストに要素を追加し、インデックス番号を指定して代入することができます。以下のように記述します。
追加したいリスト名.insert(インデックス番号, 追加する要素)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = [1, 2, 4, 5]
list_1.insert(2, 3)
list_1
実行結果は以下の通りになります。
リストの長さを上回る列番号を指定すると、最後のインデックスに挿入されます。以下の例で説明します。
list_1 = [1, 2, 4, 5]
list_1.insert(100, 3)
list_1
実行すると以下の結果が出力されます。
元あった list_1 は上書きされてしまいますので、注意してください。元のリストを保持したい場合は copy を使って保存して下さい。また、append 同様、追加は一つずつしかできませんので、そちらも注意してください。
remove
リストから要素を削除します。指定した要素を削除することができます。以下のように記述します。
削除したい要素が入ったリスト.remove(削除する要素)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = [1, 2, 4, 5]
list_1.remove(2)
list_1
実行結果は以下の通りになります。
存在しない要素を指定するとエラーが出るので注意してください。
pop
リストから要素を削除します。指定した要素を削除することができます。以下のように記述します。
削除したい要素が入ったリスト.pop(インデックス番号)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = [1, 2, 4, 5]
list_1.pop(1)
list_1
実行しますと、以下の結果が出ます。
存在しないインデックス番号を指定するとエラーが出ます。
index
リストのインデックス番号を返します。以下のように記述します。
リスト名.index(検索する名前)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = ["A", "A", "B", "C"]
list_1.index("B")
実行しますと、以下の結果が出ます。
重複した要素を選択した場合、最初に見つかった要素のインデックス番号を返します。以下がコード実行例です。
list_1.index("A")
実行すると、最初に出てくる 0 番目のインデックスが返ってきます。
count
代入した要素がリストに何個含まれているか返します。以下のように記述します。
検索したいリスト.count(数を数えたい要素)
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = ["A", "A", "B", "C"]
list_1.count("A")
実行しますと、以下の結果が出ます。
sort
リストを小さい順(昇順)もしくは大きい順(降順)に並び替えます。以下のように記述します。
並び替えたいリスト.sort(reverse=False) #昇順
# True にすると降順になります。
# デフォルトが False であるため、昇順の場合は省略可能
実際にJupyter Notebook で以下のコードを実行してみましょう。
list_1 = ["B", "C", "A"]
list_1.sort()
list_1
list_1.sort(reverse=True)
list_1
実行しますと、以下の結果が出ます。
tuple の使い方
空タプルの作成
tuple は以下のように記述します。
tuple()
また以下のように記述します。
()
実際にJupyter Notebook で以下のコードを実行してみましょう。
tuple_clf = tuple()
tuple_clf
tuple_clf = ()
tuple_clf
以下の結果になります。
要素の入ったタプル
基本的に以下の 2 通りで記述します。
(要素1, 要素2, ・・・)
要素1, 要素2, ・・・
Jupyter Notebook で実行してみましょう。以下のコードを実行してみてください。
tuple_input_num = (1, 5, 9)
tuple_input_num
tuple_input_num = 1, 5, 9
tuple_input_num
実行した結果は以下の通りです。
要素の切り出し
list と一緒です。以下のように記述します。
タプルのインスタンス[開始するインデックス : 終了するインデックス : 何個おきに取り出すか]
Jupyter Notebook で実行してみましょう。以下のコードを実行してみてください。
tuple_input_num = (1, 5, 9, 1)
tuple_input_num[0: 3: 2]
実行すると以下の結果になります。リストと同様になることがわかると思います。
tuple で使えるメソッド
「list でよく使用するメソッド」で説明した index, count の二つしか使えません。使い方も list 同様です。Jupyter Notebook で以下のコードを実行してみましょう。
tuple_input_num = (1, 5, 9, 1)
tuple_input_num.index(5)
tuple_input_num.count(1)
実行すると以下の結果になります。リストと同様になることがわかると思います。
list, tuple が Python の最高傑作だと考える理由
Python の中で list, tuple が最高峰だと考えられる理由は柔軟性の高さにあります。「メソッドの豊富さ」と「どんな値でも要素として代入できること」が柔軟性に貢献しています。
Python 以外の言語であれば、list, tuple といったオブジェクトが基本的に存在しません。そのため、自分で文字や数字の列(配列)を作成し、メソッドを作成していかなければなりません。また、他の言語で配列を設定しようとすると、数値のみ、文字のみといった単独の型しか代入できませんが、Python のリストだと [1, “A”] のように数字と文字を同時に入れることができます。さらに、Python のリストにはオブジェクトを入れることができます。[[1, 2], [3, 4]] といった具合です。このように、Python の配列である list, tuple は柔軟性が高いことがわかると思います。柔軟性が高い配列だとコードの確認作業が難しくはなりますが、コードの見やすさ、作業効率の向上、といった利点があります。
最後に
今回は tuple, list について解説しました。長文の記事になりましたので、時間をかけて学習することをお勧めします。本記事は以上です。ありがとうございました。