【Python入門・応用】06.リスト|要素へのアクセス方法、追加や削除の仕方を学習しよう(初心者〜中級者向け)

こんにちは。キノコードです。
この動画では、Pythonのリストについて説明します。
リストは、Pythonのプログラムにおいてよく使われるデータ型のひとつです。
リストとはなにか、どのように扱うことができるのか、などを学びましょう。

まずはじめに、リストとは何か、について説明します。
次にリストの要素へのアクセスの仕方、要素の変更の仕方を学習します。
その次に、リストに要素を追加する方法、要素を削除する方法について学習しましょう。

Python学習のアウトプットができる問題集「キノクエスト」では、早速この動画に出てきた問題を解くことができます。
インプットしたことをすぐにアウトプットして、ご自身のスキルにしてみませんか?
「キノクエスト」は、ただ問題を解くだけではありません。
目的別にどのような順で学習を進めればよいかというカリキュラムがあります。
Pythonで何をやってみたいかという目的を決めることをおすすめしています。
また、プログラミングでどんなことができるの?プログラミング上達のコツは?などを説明した限定動画が多数あります。
プログラミング学習に役立つ内容を、動画で知ることができます。
詳しくは、概要欄にあるリンクURLからご確認ください。
「キノクエスト」は月額1,990円で問題解き放題です。
ご登録お待ちしております!

それではレッスンスタートです。

リストとは

リストとは、複数のデータを格納することができるデータ型です。
変数のレッスンで、変数は「箱」と説明しました。
例えるなら、変数は1つのデータしか入れられない「箱」なのに対して、リストは複数のデータを入れることができる「ロッカー」です。
リストの1つ1つの箱のことを要素といいます。
リストのそれぞれの要素には、場所の情報が割り当てられています。
言い換えれば、データが存在する住所のようなものです。
この住所には、インデックスという番号が割り当てられています。
1番最初のインデックスは0から始まります。1から始まるわけではないので注意しましょう。
つまり、1番最初のインデックスは「0」、2番目のインデックスは「1」といったように、リストが格納されている「順番 - 1」となります。

リストの作り方

それでは、リストの作り方を見ていきましょう。
変数 = [データ1,データ2,データ3,...]
このように、リストは角括弧を使い、それぞれの要素をカンマで区切って入力します。
実際にコードを見ながら確認していきましょう。

a = ['sato', 'suzuki', 'takahashi']

print(a)

このコードは、aという変数に、sato、suzuki、takahashiという3つのデータが入ったリストを作り、表示するものです。
最初にリストを代入する変数名を記述します。
イコールを書いて、角括弧を記述します。
これで要素のないリストができました。
次にリストに要素を入れていきます。
それぞれの要素をカンマで区切ることを忘れないようにしましょう。
これでリストが作成できました。

リストの要素を参照

作ったリストの要素にアクセスしてみましょう。
要素にアクセスするにはインデックスを使います。

a = ['sato', 'suzuki', 'takahashi']

print(a[0])
print(a[1])
print(a[2])

変数の後に角括弧を付けます。
角括弧の中にインデックスを指定することで、対応したリストの要素にアクセスできます。
実行してみましょう。
sato、suzuki、takahashiがそれぞれ表示されました。

リストの要素を変更

要素を変更してみましょう。
変更したい要素のインデックスを指定して代入します。
リストの2番目のsuzukiさんをtanakaさんにしてみます。
2番目なので角括弧に書くインデックスは1です。
変更されているか確認してみましょう。
実行してみましょう。

a = ['sato', 'suzuki', 'takahashi']

a[1] = 'tanaka'

print(a[0])
print(a[1])
print(a[2])

suzukiさんがtanakaさんに変わっています。

なお、インデックスでマイナスの値にすると、後ろから数えた位置を指定することができます。

a = ['sato', 'suzuki', 'takahashi']

print(a[-1])
print(a[-2])

-1を指定すると、末尾のtakahashiさん、-2を指定するとsuzukiさんを表示できました。

リストのスライス

また、要素の取得では、開始位置と終了位置のインデックスを指定することができます。
この範囲指定には、コロンを使用します。
終了位置は含まれないことに注意してください。
インデックスの1から4、インデックスの2から、インデックスの2まで、をそれぞれ指定します。
実行してみましょう。

a = [0, 1, 2, 3, 4, 5]

print(a[1:4])
print(a[2:])
print(a[:2])

それぞれ、1,2,3、2,3,4,5、0,1が表示されました。

また、コロンを2つ重ねると、指定した数でステップして取得することができます。
マイナスの値を指定すると、リストの後ろからステップして取得できます。
2と-3を指定してみましょう。
実行します。

a = [0, 1, 2, 3, 4, 5]

print(a[::2])
print(a[::-3])

2を指定すると、0,2,4が取得でき、-3を指定すると、後ろから5,2を取得できました。

リストのネスト

リストの中にリストを入れることもできます。
リストの中にリストを入れる場合は、角括弧の中に角括弧を書き、そこに代入するデータを記述します。
要素へのアクセスについては、角括弧を2回使用すればよいです。
satoさんは、1つ目のリストの、1番目です。よって、0の0です。
suzukiさんは、1つ目のリストの、2番目です。よって、0の1です。
takahashiさんは、2つ目のリストの、1番目です。よって、1の0です。
tanakaさんは、2つ目のリストの、2番目です。よって、1の1です。
実行してみましょう。

a = [['sato', 'suzuki'], ['takahashi', 'tanaka']]

print(a[0][0])
print(a[0][1])
print(a[1][0])
print(a[1][1])

satoさん、suzukiさん、takahashiさん、tanakaさんが表示されました。

リストの足し算、掛け算

リストを使って足し算や掛け算をすることができます。
まず足し算を行ってみましょう。
aというリストに別のリストを足します。

a = ['sato', 'suzuki', 'takahashi']
a = a + ['tanaka', 'sato']

print(a)

このように、tanakaさんとsatoさんが追加されました。
なお、リストの足し算では型を揃えてリストとリストを足し算する必要があります。
そのため、要素を1つだけ追加したい場合でも、要素を角括弧で囲み、リストを作った上で足す必要があります。
リストに数値や文字列を直接足そうとするとエラーになるので注意してください。

今度はリストを使った掛け算を行ってみましょう。
アスタリスクの後ろに整数を入力します。
今回の例では2を入力します。
こうすることでリストの要素を2回繰り返します。

a = ['sato','suzuki','takahashi'] * 2

print(a)

satoさん、suzukiさん、takahashiさんという要素を2回繰り返したリストができました。

リストに要素を追加する方法

ここからは、リスト型が持つ機能やメソッドとその使い方を見ていきましょう。
まずはリストに要素を追加する方法です。

リストに要素を追加 append

appendメソッドは、リストの末尾に要素を追加することができます。
aというリストにtanakaさんを追加してみましょう。

a = ['sato', 'suzuki', 'takahashi']
a.append('tanaka')

print(a)

tanakaさんが末尾に追加されました。

1つの要素だけではなく、リスト自体を追加することもできます。
今度はtanakaさんとsasakiさんという要素が入ったリストを追加してみましょう。
実行します。

a = ['sato', 'suzuki', 'takahashi']
a.append(['tanaka', 'sasaki'])

print(a)

リストがそのまま末尾に追加されました。

リストの最後に要素を追加 extend

要素を追加するメソッドにはextendメソッドもあります。
appendメソッドと似ていますが、リスト内のデータを分解して、要素として末尾に追加する点が異なります。
先ほどと同じリストを指定してみましょう。
実行します。

a = ['sato', 'suzuki', 'takahashi']
a.extend(['tanaka', 'sasaki'])

print(a)

リスト内のデータが、それぞれ要素として末尾に追加されました。

なお、丸括弧内にリストではなく文字列を入力した場合、文字列を構成する1文字1文字が要素として認識されます。

a = ['sato', 'suzuki', 'takahashi']
a.extend('tanaka')
print(a)

そのため、1文字ずつ要素として追加されることになるので注意しましょう。

リストの指定した位置に要素を追加 insert

insertメソッドを使うと、リストの指定した位置に要素を追加することができます。
insertメソッドでは、はじめに要素を追加する位置、つまりインデックスを指定します。
そして2つ目に追加する要素を指定します。
ここでインデックスは0から始まるということに注意しましょう。
インデックスに0を指定して、tanakaさんを追加してみましょう。
実行します。

a = ['sato', 'suzuki', 'takahashi']
a.insert(0, 'tanaka')

print(a)

リストの先頭にtanakaさんが追加されました。

リストの要素を削除する方法

今度は、リストの要素を削除する方法です。

リストの要素を削除 del

del文を使用して、リストのインデックスが1のsuzukiさんを削除しましょう。
delの後にリストを格納した変数、その後に消したい要素のインデックスを指定します。
実行します。

a = ['sato', 'suzuki', 'takahashi']
del a[1]

print(a)

鈴木さんが削除されました。

リストの要素を取り出し pop

要素を削除するメソッドには、popメソッドもあります。
popメソッドを使うと、要素を削除して、その要素を表示することができます。
suzukiさんを削除してみましょう。
popメソッドの丸括弧の中に、削除したいインデックスを指定します。
実行します。

a = ['sato', 'suzuki', 'takahashi']

print(a.pop(1))
print(a)

削除した鈴木さんが表示されました。
また、リストから鈴木さんが削除されていることがわかります。

リストから指定した要素を検索して削除 remove

removeメソッドを使うと指定した要素を検索し、削除することができます。
実行します。

a = ['sato', 'suzuki', 'takahashi']
a.remove('suzuki')

print(a)

指定したsuzukiさんが削除されました。

なお、指定した要素がリスト内に複数含まれる場合は、最初の1つだけが削除されます。

a = ['sato', 'suzuki', 'takahashi', 'suzuki']
a.remove('suzuki')

print(a)

全ての要素を削除 clear

リストの全ての要素を削除するには、clearメソッドを使用します。
実行してみましょう。

a = ['sato', 'suzuki', 'takahashi']
a.clear()

print(a)

リストの中身がからになっていることがわかります。

リストの要素を検索 in

次に、リストに指定した要素が含まれているかどうかを検索する方法です。
in演算子を使います。
検索したい要素を書き、in、そして検索対象となるリストを指定します。
この例では、aというリストの中にsatoさん、tanakaさんが含まれているかどうかを検索しています。
要素が存在する場合は「True」が返され、存在しない場合は「False」が返されます。
実行します。

a = ['sato', 'suzuki', 'takahashi']

print('sato' in a)
print('tanaka' in a)

実行結果から、satoさんはリストに存在し、tanakaさんはリストに存在しないことがわかりました。

リストで検索した要素の数を取得 count

リストに指定した要素が何個含まれているかを取得する方法です。
countメソッドを使います。
satoさんの数を数えてみましょう。実行します。

a = ['sato', 'suzuki', 'takahashi', 'sato']

print(a.count('sato'))

satoさんの個数、2を取得できました。

リストから要素のインデックスを取得 index

指定した要素がリストの何番目にあるのかを取得する方法です。
indexメソッドをいます。
aのリストで、satoさん、tanakaさんのインデックスが何番目かを取得してみましょう。
実行します。

a = ['sato', 'suzuki', 'takahashi']

print(a.index('sato'))
print(a.index('tanaka'))

1つ目の例では、satoさんはインデックスの0番目なので、「0」が表示されました。
2つ目の例では、tanakaさんは存在しないのでエラーが表示されました。

リストの要素の順を逆にする reverse

リスト内の要素の並び順を逆にする方法です。
reverseメソッドを使います。
実行します。

a = ['sato', 'suzuki', 'takahashi']
a.reverse()

print(a)

並び順が逆になりました。

リストを昇順に並べ替え sort

リストの並び替えをする方法です。
sortメソッドを使用すると、リストの数値を小さい順に並べ替えることができます。

a = [9, 5, 3, 1, 8, 6]
a.sort()

print(a)

小さい順に並べ替えることができました。

今度は大きい順に並べ替えでみましょう。
sortメソッドで、reverse=Trueと指定します。

a = [8, 5, 3, 1, 9, 6]
a.sort(reverse=True)

print(a)

これで大きい順に並べ替えることができました。

リストの最大値、最小値を取得 max,min

またmax関数、min関数を使えば、リスト内の要素の最大値と最小値を簡単に取得することができます。
実行します。

a = [8, 5, 3, 1, 9, 6]

print(max(a))
print(min(a))

リスト内の要素の最大値と最小値を取得することができました。

先ほど出てきたindexメソッドを併用することで、max関数やmin関数で呼び出した数値のインデックスを取得することができます。
この例では、aというリストの中の最大値のインデックスを調べます。

a = [8, 5, 3, 1, 9, 6]

print(a.index(max(a)))

最大値9のインデックスは4なので、4が表示されました。
このように、indexメソッドは丸括弧内に関数を入力してインデックスを調べることもできます。

リストの要素数 len

リストの要素数を知りたい場合は、len関数を使用します。
len関数は、Pythonの組み込み関数です。
実行します。

a = ['sato', 'suzuki', 'takahashi']

print(len(a))

要素の数である3を取得できました。
リストだけではなく、他のオブジェクトでもよく使用する関数ですので、覚えておきましょう。