こんにちは、ミナトです。
前回の記事で文字列や数値の基本的な使い方を紹介しました。
「文字列や数値の基本的な使い方は分かったけど、複数のデータをまとめて管理したい」という場合もありますよね。そんな時は、リストというデータ構造を利用します。
リストを用いることで複数のデータを並べて管理して、効率的に扱うことができます。


今回はプログラミングで頻繁に使うリストについて解説するで!
今回はリストの使い方を解説していきます。
文字列や数値などの基本的な扱い方が分からない方は先にこちらの記事をご確認ください。
目次
リストの基本的な使い方
リストとは?
リストは複数のデータを並べて管理して、効率的に扱うことができるデータ型です。他の言語では配列などと呼ばれることもあります。
数値や文字列などを並べて管理する表のようなものです。生徒や社員の名前が一覧で並んでる名簿のようなものイメージしていただけるとわかりやすいと思います。

リストを定義する
リストを定義する場合、以下のように[]
でデータを囲います。データは,
で区切ります。
[データ, データ, データ ・・・]
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
インデックスを指定して、要素を取り出す
リストの中からデータを取り出すにはインデックスを指定します。
リストのインデックスは0から始まります。
リスト名[インデックス番号]
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
print(name_list[0])
print(name_list[2])
## 出力
Yamada
Kimura
また、インデックスに-n
を指定することで、データを後ろからn番目を取得できます。
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
print(name_list[-1])
print(name_list[-3])
## 出力
Suzuki
Kimura
スライスを利用して、要素を取り出す
Pythonにはスライスという便利な機能があり、取得したいデータ位置の開始と終了を指定することでデータを取り出せます。
[開始位置:終了位置]
文字は指定した開始位置から終了位置-1番目までが取得されることに注意してくだい。
また、開始位置もしくは終了位置のどちらかは省略可能です。
開始位置を省略した場合は最初から終了位置までの値を取得し、終了位置を省略した場合は開始位置から最後までを取得します。
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
print(name_list[0:3])
print(name_list[1:4])
print(name_list[:4])
print(name_list[1:])
## 出力
['Yamada', 'Tanaka', 'Kimura']
['Tanaka', 'Kimura', 'Sato']
['Yamada', 'Tanaka', 'Kimura', 'Sato']
['Tanaka', 'Kimura', 'Sato', 'Suzuki']
1つ飛ばしで要素を取り出す
スライスを指定するときにステップ数を指定できます。
以下のようにリスト[開始:終了:ステップ数]
とすることで一つ飛ばしで要素を取得できます。
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
print(name_list[::2])
## 出力
['Yamada', 'Kimura', 'Suzuki']
後ろから順番に要素を取り出す
後ろから要素を取り出すにはステップ数に-の値をセットします。
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
print(name_list[::-1])
## 出力
['Suzuki', 'Sato', 'Kimura', 'Tanaka', 'Yamada']
リストのネスト(2次元配列)
リストはネストさせることができます。
先程までは一次元のリストでしたが、縦、横の二次元で管理できるとイメージしてください。
リストを二次元で管理するためには、リストの中にリストを格納します。
name_list = ['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
num_list = [1, 2, 3, 4, 5]
l2 = [name_list, num_list]
print(l2)
## 出力
[['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki'], [1, 2, 3, 4, 5]]
データを取り出す際は、同様にインデックスを指定します。
さらに一つ目の配列の中の要素を取り出すには以下のようにします。
リスト名[インデックス1][インデックス2]
print(l2[0])
## 出力
['Yamada', 'Tanaka', 'Kimura', 'Sato', 'Suzuki']
print(l2[0][2])
## 出力
Kimura
リストの操作
要素の変更
リストの中の要素を変更するにはインデックスを指定して値を代入します。
l = ['a', 'b', 'c', 'd', 'e']
l[0] = 'x'
print(l)
## 出力
['x', 'b', 'c', 'd', 'e']
またスライスを利用することで複数の要素をまとめて置き換えることもできます。
l = ['a', 'b', 'c', 'd', 'e']
l[1:4] = ['B', 'C', 'D']
print(l)
## 出力
['a', 'B', 'C', 'D', 'e']
要素の追加
値をリストの最後に追加する場合はappendメソッドを利用します。
l = ['a', 'b', 'c', 'd', 'e']
l.append('x')
print(l)
## 出力
['a', 'b', 'c', 'd', 'e', 'x']
値をリストの最初に追加する場合はinsert(インデックス, 値)
を利用します。
l = ['a', 'b', 'c', 'd', 'e']
l.insert(0, 'x')
print(l)
## 出力
['x', 'a', 'b', 'c', 'd', 'e']
要素の削除
要素を削除するにdel
を利用します。
l = ['a', 'b', 'c', 'd', 'e']
del l[1]
print(l)
## 出力
['a', 'c', 'd', 'e']
また、remove
メソッドを利用することでも要素を削除できます。
removeは引数で指定した要素に一致する最初の要素をリストから削除します。以下の例では一つ目のaのみ削除されます。
l = ['a', 'a', 'b', 'c', 'd', 'e']
l.remove('a')
print(l)
## 出力
['a', 'b', 'c', 'd', 'e']
リストの結合
リストどうしを結合するには+
演算子を利用します。
l1 = [1, 2, 3, 4, 5]
l2 = [6, 7, 8, 9, 10]
l3 = l1 + l2
print(l3)
## 出力
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
リストで使えるメソッド
リストのメソッドは多数あるので、本記事で全ては取扱いませんが、一部を紹介しておきます。
pop
popメソッドを利用することで、リストの末尾から値を取り出せます。
取り出した値は元のリストからは削除されることに注意してください。
l = ['a', 'b', 'c', 'd', 'e']
print(l.pop())
print(l)
## 出力
e
['a', 'b', 'c', 'd']
また、引数にインデックスを指定することで任意の場所から要素を取り出せます。
l = ['a', 'b', 'c', 'd', 'e']
print(l.pop(1))
print(l)
## 出力
b
['a', 'c', 'd', 'e']
index
indexメソッドを利用することで、引数に指定した要素のインデックスを取得できます。
l = ['a', 'b', 'c', 'd', 'e']
print(l.index('c'))
## 出力
2
count
countメソッドを利用することで、引数に指定した要素の値の数を取得できます。
l = ['a', 'b', 'b', 'b', 'c', 'd', 'e']
print(l.count('b'))
## 出力
3
sort
sortメソッドを利用することで、リストの要素を昇順に並び替えることができます。
また、引数にreverse=True
と指定することで降順に並び替えることができます。
l = [2, 4, 3, 1, 5]
l.sort()
print(l)
## 出力
[1, 2, 3, 4, 5]
l = [2, 4, 3, 1, 5]
l.sort(reverse=True)
print(l)
## 出力
[5, 4, 3, 2, 1]
reverse
reverseメソッドを利用することで、要素の並びを反転できます。
l = [2, 4, 3, 1, 5]
l.reverse()
print(l)
## 出力
[5, 1, 3, 4, 2]
join
joinメソッドを利用することで、特定の文字列でリストを結合できます。
l = ['A', 'p', 'p', 'l', 'e']
print('-'.join(l))
## 出力
A-p-p-l-e
リストのコピー
リストのコピーを作成する場合はcopyメソッドを利用します。
リストを扱う上での注意点として、リストを格納した変数を別の変数に代入した場合、値のコピーが代入されるのではなく、元のリストのアドレス(メモリ上の位置)を渡すことになります。これを参照渡しといいます。
そのまま新しい変数の値を書き換えると元の値を書き換えてしまうので注意が必要です。説明だけだと伝わりにくいと思いますので、実際のコードで確認しましょう。
以下の例ではl2[0]
をxに置き換えていますが、同時にl1[0]
も置き換わってしまっています。
l1 = ['a', 'b', 'c', 'd', 'e']
l2 = l1
l2[0] = 'x'
print(l1)
print(l2)
## 出力
['x', 'b', 'c', 'd', 'e']
['x', 'b', 'c', 'd', 'e']
続いてcopyメソッドを利用した例をみてみましょう。
こちらではl2のみが変更されることが確認できます。
l1 = ['a', 'b', 'c', 'd', 'e']
l2 = l1.copy()
l2[0] = 'x'
print(l1)
print(l2)
## 出力
['a', 'b', 'c', 'd', 'e']
['x', 'b', 'c', 'd', 'e']
まとめ
今回はリストの操作方法について確認しました。
Pythonで複数のデータをまとめて管理する場合、リストを利用できます。
リストには多くの便利なメソッドが用意されており、複数のデータを効率的に管理できます。
リストの操作もPythonでプログラミングを行う上で頻繁に利用しますので、繰り返し実装し、慣れるようにしてください。
最後まで読んでいただき、ありがとうございます。
この記事が、「面白いな」、「勉強になったな」という方は、ぜひ、SNSでシェアしていただけると嬉しいです。