この記事を書いたきっかけ
プログラミングの問題を解くとき、ほとんど毎回と言っていいほどリストを使います。問題の中でリストを操作するメソッドを書くことはよくあることですが、全てのメソッドの書き方を覚えているわけではありません。append()メソッドくらい頻繁に使うメソッドなら大丈夫ですが、あまり使わないinsert()メソッドとかsort()メソッドとか、引数の書き方も含めるとどうしてもすぐには書けません。
そこで、リストを操作するメソッドで、現実的に使う可能性の高いものは一気に覚えてしまおうと思い記事にしました。
「リストを〇〇したい!」と思ったとき、直感的に「〇〇メソッドを使えばいける!」と思い出せるようにしたいです。
記事構成は以下の通りです。
- 見出し(リストに対してしたいこと)
- メソッド
- メソッドの使い方
- メソッドの使用例
- ポイント(特記事項)
リストの基本操作
まず、メソッドとはオブジェクト(例えばリストや数値、文字列など)と結びついた専用の関数のことをいいます。メソッドの呼び出しは、メソッド名の前にオブジェクトと「.」がつきます。
オブジェクト名.メソッド名(引数)
リストには、内容を調査したり、修正したりするためのメソッドが用意されています。
リストの末尾に要素を追加したい
メソッド:append()
使い方:リストの最後にオブジェクトを追加します。
my_list = [1, 2, 3]
my_list.append(4)
print(my_list) # 出力: [1, 2, 3, 4]
ポイント:append()は1つの要素を追加するのに対し、複数の要素を追加したい場合はextend()を使用します。extend()はリストに複数の要素を一度に追加できますが、追加する要素が1つだけの場合でもリスト形式で渡す必要があります。
他のリストのすべての要素をリストに追加したい
メソッド:extend()
使い方:追加したい複数の値をシーケンスにして与えることで、リストに一度に追加します。
シーケンスとは、Pythonにおけるデータ型の一つで、順序を持った要素の集まりを指します。リスト、タプル、文字列などが代表的なシーケンス型です。
my_list = [1, 2, 3]
my_list.extend([4, 5, 6])
print(my_list) # 出力: [1, 2, 3, 4, 5, 6]
ポイント:extend()はリストに複数の要素を一度に追加できますが、追加する要素が1つだけの場合でもリスト形式で渡す必要があります。
指定した位置に値を挿入したい
メソッド:insert()
使い方:オブジェクトをリストに挿入するのに使います。
x.insert(n, y)
でリストx
のインデックスn
の位置にy
を挿入します。
my_list = [1, 2, 3]
my_list.insert(1, 'a')
print(my_list) # 出力: [1, 'a', 2, 3]
ポイント:insert()は指定したインデックスに要素を挿入しますが、大きなリストの場合、操作が非効率になることがあります。挿入された要素より後ろにある要素がすべてシフトされるからです。
指定した値を持つ最初の要素をリストから削除したい
メソッド:remove()
使い方:指定された値のうちで最初に出現したものを削除します。
my_list = [1, 2, 3, 2, 4]
my_list.remove(2)
print(my_list) # 出力: [1, 3, 2, 4]
ポイント:存在しない値を削除しようとすると、ValueErrorが発生します。
指定した位置にある要素をリストから削除したい(その要素を返す場合)
メソッド:pop()
使い方:引数に指定された要素(デフォルトでは最後の要素)をリストから削除し、削除した要素を返します。
my_list = [1, 2, 3]
element = my_list.pop()
print(element) # 出力: 3
print(my_list) # 出力: [1, 2]
element = my_list.pop(0)
print(element) # 出力: 1
print(my_list) # 出力: [2]
ポイント:インデックスが範囲外の場合、IndexErrorが発生します。
リストのすべての要素を削除したい
メソッド:clear()
使い方:元のリストの内容をすべて消去します。
my_list = [1, 2, 3]
my_list.clear()
print(my_list) # 出力: []
ポイント:リストを空にする他の方法(スライスなど)もありますが、clear()はより明示的でわかりやすい方法として知られています。
リストの検索・計測
指定した値を持つ最初の要素のインデックスを教えて欲しい
メソッド:index()
使い方:リスト内を検索し、ある値が最初に現れるインデックスを見つけ出します。
my_list = [1, 2, 3, 2]
index = my_list.index(2)
print(index) # 出力: 1
ポイント:値が存在しない場合、ValueErrorが発生します。
指定した値がリストに含まれる回数を返したい
メソッド:count()
使い方:ある要素がリスト内に何回出現するかを数えます。
my_list = [1, 2, 3, 2]
count = my_list.count(2)
print(count) # 出力: 2
ポイント:リスト内に値が存在しない場合は0を返します。
リストの並べ替え
リストの要素をその場で昇順に並べ替えたい
メソッド:sort()
使い方:リストを並び替えるのに使います。ソートされたリストの複製を返すのではなく、元のリストを変更しています。
引数で並べ替えの順序やキーを指定します。
my_list = [3, 1, 4, 2]
my_list.sort()
print(my_list) # 出力: [1, 2, 3, 4]
my_list.sort(reverse=True)
print(my_list) # 出力: [4, 3, 2, 1]
ポイント:sort()はリストをその場で並べ替えます。元のリストは変更されます。戻り値はありません。元のリストを保持したい場合はsorted()を使用します。
リストの要素をその場で逆順に並べ替えたい
メソッド:reverse()
使い方:リストの要素を逆順にします。
my_list = [1, 2, 3]
my_list.reverse()
print(my_list) # 出力: [3, 2, 1]
ポイント:reverse()はリストの要素をその場で逆順に並べ替えます。元のリストを変更せずに逆順のリストを取得したい場合はスライスを使用します。
例:reversed_list = my_list[::-1]
その他の操作
リストをコピーしたい
メソッド:copy()
使い方:リストを複製します。
my_list = [1, 2, 3]
new_list = my_list.copy()
print(new_list) # 出力: [1, 2, 3]
ポイント:
通常の代入は、同じリストに別の名前を結びつける(バインドする)だけで大丈夫です。
a = [1, 2, 3]
b = a
b[1] = 50
print(a) #[1, 50, 3]
print(b) #[1, 50, 3]
aとbとを別のリストにしたいなら、aをコピーしておいてbと結びつける必要があります。
a = [1, 2, 3]
b = a.copy()
b[1] = 50
print(a) #[1, 2, 3]
print(b) #[1, 50, 3]
元のリストを変更せずに新しいリストを作成するときに、copy()メソッドを使います。
まとめ
よく使うリストを操作するメソッドを列挙しました。ただ、結局のところ何度も書かないと覚えられません。メソッドの書き方を忘れたときはこの記事に戻ってきて、見直したいと思います。