Pythonのリスト型の宣言・操作と重要なメソッドについて解説!

2021-03-07

Pocket

こんにちは、爽です。皆さん、いかがお過ごしでしょうか?

今回はPythonのリスト型の宣言・操作とリスト型で使われる重要なメソッドについて確認します。
リスト型はループ文と共によく用いられる使用頻度の高いデータ型ですので、ぜひマスターしましょう。

■この記事の対象読者
・Pythonに興味がある方
・Pythonを学び始めてみたい方
・Pythonのリスト型の詳細について知りたい方

それではどうぞ!

Pythonのリスト型の特徴と宣言方法

まず、変数とは何か単一の値を入れる箱というイメージに対して、リスト型は複数の要素を入れることができる箱というイメージを持って頂ければと思います。

リスト型の宣言の基本

では具体的な宣言方法についてです。
Pythonではリスト型に代入したい値を[](ブラケットのかっこ)で要素を囲うことで宣言できます。

#リスト型宣言
l = [1,2,3,4,5,6,7,8,9,10]
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#データ型の確認
type(l)
>>list

Javaだとリストのインスタンスをnewしてあげたり、型を指定してあげる必要があったり、色々面倒なのですが、それに比べると非常にシンプルです。

リスト型の中には様々なデータ型を格納することが可能

また、リスト型の中には数字型以外のデータ型を格納することも可能ですし、リストの中にリストを入れる(これをリストのネストと呼ぶ)こともできます。
また、それらを混合して格納することも可能です。

#リストに文字列型を格納
m = ["dog","cat","bird"]
m
>>['dog', 'cat', 'bird']

#ネストされたリストを宣言
ll = [[11, 12, 13], [101, 102, 103]]
ll
>>[[11, 12, 13], [101, 102, 103]]

#色々なデータ型が入ったリスト
n = [1,2,"dog","cat","bird",[11, 12, 13], [101, 102, 103],3]
n
>>[1, 2, 'dog', 'cat', 'bird', [11, 12, 13], [101, 102, 103], 3]

リスト型から要素を取り出す方法

次はリスト型から要素を取り出す方法です。
これは文字列型の変数から要素を取り出す方法と同じで、リスト名[インデックス]の書式で取り出せます。
また、スライスを使うことで任意の幅でリストの中から要素を取り出すこともできます。

リスト型から要素を取り出す時の基本(インデックスの指定とスライス)

#リスト型宣言
l =[1,2,3,4,5,6,7,8,9,10]

#要素を最初のインデックスから取り出す
l[0]
>>1
#-1で最後のインデックスの要素を取り出す
l[-1]
>>10
#リストの中身を1つ飛ばしで取り出す
l[::2]
>>[1, 3, 5, 7, 9]
#リストの中身を逆の順番で取り出す
l[::-1]
>>[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

#スライスでインデックスの2番目の要素から5番目の要素までを取り出す
l[2:5]
>>[3, 4, 5]
#インデックスの2番目から最後までをスライスで取り出す
l[2:]
>>[3, 4, 5, 6, 7, 8, 9, 10]
#インデックスの最初から2番目までをスライスで取り出す
l[:2]
>>[1, 2]
#最初から最後までをスライスで取り出す
l[:]
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ネストしたリストから要素を取り出す方法

また、ネストしたリストの中の要素を取り出すには、リスト名[リストのインデックス][リスト内のインデックス]の書式で取り出します。

#ネストされたリストを宣言
ll = [[11, 12, 13], [101, 102, 103]]

#インデックス0番目のリストのインデックス1番目の要素を取り出す
ll[0][1]
>>12
#インデックス1番目のリストのインデックス2番目の要素を取り出す
ll[1][2]
>> 103

存在しないインデックスを指定するとエラー

なお、文字列型と同様に存在しないインデックスを指定するとIndexErrorが発生します。

#存在しないインデックスを指定
l[100]
>>----> 1 l[100]

IndexError: list index out of range

リスト型の操作

次はリスト型の操作についてです。
リスト型の操作とはリストの値を任意の値に書き換えたり、リストの中の値を削除したり、リストそのものを削除することです。

#リスト型宣言
l =[1,2,3,4,5,6,7,8,9,10]
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#インデックス1番目のリストの要素を任意の要素で書き換える
l[1] = 2000
l
>>[1, 2000, 3, 4, 5, 6, 7, 8, 9, 10]

#インデックスの2番目から6番目の要素をスライスで削除する
l[2:6] =[]
l
>>[1, 2000, 7, 8, 9, 10]

#del文でインデックスで指定したリストの中身を削除する
del l[0]
l
>>[2000, 7, 8, 9, 10]
#del文でリストそのものを削除する
del l
l
>>----> 1 l

NameError: name 'l' is not defined #←リストそのものが見つからないというエラー

リスト型のメソッド

最後はリスト型を操作するときに使うメソッドを紹介します。
なお、リスト型のメソッドは組み込み関数の為、Pythonの公式ドキュメントがあるので、このブログでは使用例だけ紹介します。
>>組み込み型(Python公式ドキュメント)

#リスト型宣言
l =[1,2,3,4,5,6,7,8,9,10]

#len関数でリストの中に要素がいくつ入っているか確認する
len(l)
>>10

#appendメソッドでリストの最後に要素を追加する
l.append(1000)
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000]

#insertメソッドでリストの任意の場所にを挿入する
#第一引数は挿入したい場所、第二引数は挿入する要素
l.insert(1,2000)
l
>>[1, 2000, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000]

#popメソッドでリストの要素を取り出して、取り出した要素をリストから削除する
#引数を指定しない場合は、リストの最後の要素を取り出してリストから削除
l.pop()
>>1000
l
>>[1, 2000, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#引数を指定すると、指定したインデックスから要素を取り出してリストから削除
l.pop(1)
>>2000
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

#extendメソッドでリスト同士を結合する
#リスト宣言
m = [1000,2000]
#リストlとmをextendメソッドで結合
l.extend(m)
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1000, 2000]

#removeメソッドでリストの中の指定した要素を削除する
l.remove(1000)
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 2000]
l.remove(2000)
l
>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
#存在しない要素を指定するとエラー
l.remove(3000)
>>----> 1 l.remove(3000)

ValueError: list.remove(x): x not in list

#リスト型宣言
new_l =[1,1,2,2,2,3,1,2,3]

#countメソッドでリストの中に指定した要素がいくつ含まれているかを確認する
new_l.count(1)
>>3
new_l.count(2)
>>4

#indexメソッドで指定した要素がリストの中で何番目に最初に登場するかを確認する
new_l.index(1)
>>0
new_l.index(3)
>>5

#sortメソッドでリストの中身を昇順に並び替える
new_l.sort()
new_l
>>[1, 1, 1, 2, 2, 2, 2, 3, 3]

#reverseメソッドでリストの中身を降順に並び替える
new_l.reverse()
new_l
>>[3, 3, 2, 2, 2, 2, 1, 1, 1]

#splitメソッドで指定した文字区切りで文字列を分割してリストに格納する
#文字列型宣言
s = "a is not b"
#空白で区切ってリストに格納する
s.split(" ")
>>['a', 'is', 'not', 'b']

#join関数でリストの中身を指定した文字区切りで結合する
#splitした結果を変数に格納
t = s.split(" ")
#空白で文字を区切って結合する
" ".join(t)
'a is not b'

#copyメソッドでリストをコピーする
#空のリストを宣言
temp_l = []
#copyメソッドでnew_lを値渡しでコピー
temp_l = new_l.copy()
temp_l
>>[3, 3, 2, 2, 2, 2, 1, 1, 1]
#copyメソッドを使った場合はnew_lとtemp_lは独立している
temp_l.append(1000)
temp_l
>>[3, 3, 2, 2, 2, 2, 1, 1, 1, 1000]
id(temp_l)
>>140528952096192
new_l
>>[3, 3, 2, 2, 2, 2, 1, 1, 1]
id(new_l)
>>140528951821248

最後のリストのコピーについては、プログラミングの学習の初期で躓くポイントの一つですので、このブログでもどこかでリストのコピーの概念を説明できればと思っています。

参考資料

この記事ではUdemyのPython+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~という講座と現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルという2つの講座を参考にさせていただきました。

Python+FlaskでのWebアプリケーション開発講座!!~0からFlaskをマスターしてSNSを作成する~

Udemyより抜粋

当講座は最低限のWeb開発の知識を知っていることが前提とはなりますが、とにかくPythonの説明とFlask開発の為の説明が充実しているのでおすすめです。
28時間に及ぶ長丁場の講座にはなりますが、絶対に聞く価値がある講座です。
これをマスターすればPythonでどんなアプリケーションでも作ることができると思います。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

とにかく説明が充実している

Webアプリ開発におけるフレームワークがなぜ有益なのか知ることができる

セキュリティ対策、Ajaxなどの技術も知れる

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

画像に alt 属性が指定されていません。ファイル名: a1ee3d048d6aa860662b6f58c4aa167f-1024x328.png

当講座はPythonの基礎から応用まで幅広く学べる講座なのでおすすめです。
この講座の講師はとにかくPythonについての知識が豊富ですし、話も適度な速さで聞き取りやすいです。さすがのシリコンバレーです。
また、最後の方に機械学習で使うライブラリについても解説があるので、データサイエンス・AIについても多少知ることができます。

当講座のおすすめポイントを以下にまとめておきます。

当講座のおすすめポイント

シリコンバレーで働いているということもあり、講師のPythonの知識が豊富

話も適度な速さで聞き取りやすい

コードの意味だけでなく、それをどう応用するかまで解説してくれる

なお、Udemyについては以下の記事でまとめていますのでご参考ください。

まとめ

ということで、今回はPythonのリスト型の操作と重要なメソッドを解説しました。
リストの操作はループ文を扱う上で必須と言っても過言ではないテーマなので、ぜひ押さえていただければと思います。
では、今回はここまでとさせていただきます。