リスト(list)とは?
Pythonで言うところのリストとは、他の言語では「配列」などと呼ばれる、似たような要素の集合体です。
リストや辞書、タプルなどはまとめて、コンテナオブジェクトとも呼ばれ、まとまったデータを一緒に扱うときに使う基本的な型と言えます。
中でもリストは順序(序列)を記憶するのが特徴で要素へのアクセスもindexを使って行うことができます。
リスト(list)基本操作
ここではPythonにおけるリストの基本的な操作を紹介します。
リストを初期化(宣言)する
リストは基本的に変数に格納して使いますが、使う前に初期化(宣言)する必要があります。
初期化をしないと、関数の呼び出し方などによって、上手くリストが使えず、エラーが出ることもしばしばありますので、必ず明示的に初期化する癖をつけましょう。
list1 = [] #一般的な初期化 list2 = list() #list関数での初期化
どちらも基本的に同じ挙動になります。
いきなり要素を明示的に格納することも初期化と呼びます。
list3 = ['りんご'] #要素に文字列を入れて初期化 list4 = [1,3,5] #要素に数値を入れて初期化
また、リストの要素としてリストや辞書、タプルなどのコンテナ型オブジェクトを渡すことも可能です。
list5 = [[]] #リストの中にリスト list6 = [{}] #リストの中に辞書 list7 = [()] #リストの中にタプル
また、リストを格納する変数名をわかりやすく「list」にしたい気持ちはわかりますが絶対にやめましょう。
list = [] #絶対にこの変数名を使ってはいけません
構文上通るには通りますが、list()関数があるため思わぬバグを引き起こします。僕はこれが原因で12時間ほどドツボにハマってネットの海を徘徊し続けたことがあります。
もちろん、どこにもこんなバグの解決法など載っていないため、自分で変数名を疑うまで永遠に解決されることはありません。
非常に基本的な事ですが、だからこそ気づきにくく、解決まで時間がかかります。気を付けましょう。
リストへ要素を追加する
リストへの要素の追加方法です。
初期化のようにいきなり要素を入れるのではなく、元々存在する要素に後からプラスするというイメージです。
主に二種類の方法があります。
append()メソッドでの要素追加
要素本体を指定してリストに追加格納したい場合はこのappend()メソッドで行います。
list8 = ['リンゴ','バナナ','すいか'] list8.append('みかん') print(list8) >>>['リンゴ', 'バナナ', 'すいか', 'みかん']
+=(加算代入演算子)での要素追加
要素本体ではなくすでに存在するリストの要素を追加したい場合があります。
その場合append()を使うとリストごと格納してしまうことになります。
list9 = ['メロン','キウイ'] list8.append(list9) #この方法ではリストにリストを格納することになる print(list8) >>>['リンゴ', 'バナナ', 'すいか', 'みかん', ['メロン', 'キウイ']]
リストにリストの要素のみを格納したい場合は+=(加算代入演算子)を使って行います。
list9 = ['メロン','キウイ'] list8 += list9 print(list8) >>>['リンゴ', 'バナナ', 'すいか', 'みかん', 'メロン', 'キウイ']
いずれの場合でもlist8の要素内容は変更されるがlist9の要素は変更されずそのまま残り続けます。
リストから要素を削除する
すでにリスト内にある要素を削除したい場合も2種類の方法があります。
要素本体を指定する方法とインデックスを指定する方法です。
remove()メソッドでの要素削除
要素本体を指定する場合はremove()メソッドを使います。
list8.remove('みかん') print(list8) >>>['リンゴ', 'バナナ', 'すいか', 'メロン', 'キウイ']
del文での要素削除
要素本体ではなくインデックスを指定して削除したい場合はdel文を使います。
del list8[2] print(list8) >>>['リンゴ', 'バナナ', 'メロン', 'キウイ'] del list8[1:3] #インデックスの範囲で削除も可能 print(list8) >>>['リンゴ', 'キウイ']
clear()メソッドで全要素削除
clear()メソッドを使うと全ての要素が削除され、空っぽのリストが残ります。
list8.clear() print(list8) >>>[]
リストから要素を取り出す(アクセスする)
リストの要素単体へのアクセスは基本的にインデックスを使います。
indexを指定してアクセス
print(list8[1]) >>>キウイ
リスト内に特定の要素が含まれるか判定(検索)する
ある値がリスト要素内に含まれるか判定するには比較演算子のinを使います。返ってくるのはTrue/Falseの真偽値です。
in演算子による判定
print('ウォーターメロン' in list8) >>>False print('キウイ' in list8) >>>True
リスト内要素を並べ替える
リストは辞書(dict)とは違いインデックスによる序列を記憶しています。そのため、並べ替えという概念が存在します。
リスト内にある要素を昇順降順で並べ替える方法は主に二種類存在します。
sort()メソッドによる並べ替え
list10 = [5, 10, 4, 7, 1, 2, 8, 3, 6, 9] list10.sort() print(list10) >>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
sort()メソッドによる並べ替えはディフォルトが昇順です。
降順に並べ替えたい場合はキーワード引数 reverse にTrueを渡します。
list10.sort(reverse=True) print(list10) >>>[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
list11 = ['い','あ','う','お','え','か'] list11.sort() print(list11) >>>['あ', 'い', 'う', 'え', 'お', 'か']
文字列も並べ替え可能です。
sorted関数による並べ替えられた新たなリスト作成
ややこしい事に似たような名前の関数が存在します。
sort()メソッドはリストオブジェクト自体の要素を変更しますが、sorted関数は「並べ替えられた新たなリスト」を返す関数です。
ややこしやぁ。
new_list = sorted(list11) print(new_list) >>>['あ', 'い', 'う', 'え', 'お', 'か']
sorted関数を利用した並べ替えの場合、元のリストオブジェクトの並び順は保持されます。
当然ですが、降順も可能。
new_list = sorted(list11,reverse=True) print(new_list) >>>['か', 'お', 'え', 'う', 'い', 'あ'] print(list11) #元のリストは序列を維持します >>>['あ', 'い', 'う', 'え', 'お', 'か']
並べ替えを使う度に、何回もググることになりそうですね(笑)
Python リスト操作 まとめ
似たようなことをするために、いくつか方法があるのは嬉しいですが、僕みたいな記憶力に難のあるタイプには辛いことこの上ないです。
備忘録も兼ねてリストの基本操作をまとめてみました。
こちらもオススメの関連記事
コメント