ここでは、Pythonのリストから要素を削除する方法を全てまとめています。
それぞれ、特徴が違うため、状況に応じて使いこなせるようになると、書けるコードの幅が広がります。
それぞれ詳しく解説していきますので、ぜひ参考にして頂ければと思います。
1. インデックス番号で要素を削除する | pop()メソッド
pop()は、リスト内の指定の要素を、インデックス番号によって削除する時に便利なメソッドです。基本は以下のように書きます。
リスト.pop(インデックス番号)
括弧 () の中に入力する値を「引数(ひきすう)」といいます。pop()メソッドの引数には、削除したい要素のインデックス番号を入力します。
例えば、以下のリストの場合、インデックス番号は、このように、前から数える場合は 0 から順番に、後ろから数える場合は -1 から順番に割り振られます。
引数を指定しない場合、リストの中の一番後ろの要素を抜き取ります。
実際に見てみましょう。
'''リストを作ります。'''
list = ["red", "orange", "blue", "green", "yellow"]
'''引数を空にすると末尾の要素を削除します。'''
list.pop() #これでリストの末尾の"yellow"を削除。
'''引数を入れると該当するインデックス番号の要素を削除します。'''
list.pop(1) #これでインデックス番号1番の"orange"を削除。
'''printして確認しましょう。'''
print(list) #"yellow"と"orange"が削除されています。
最初の「list.pop()」で、リスト内の末尾の要素である”yellow”が削除されています。次の、「list.pop(1)」で、インデックス番号1番の”orange”が削除されています。
pop()メソッドの便利なところは、削除した要素を、別の変数に代入して保存することができるという点にあります。
次の例をご覧ください。
'''リストを作ります。'''
list = ["red", "orange", "blue", "green", [1, "purple"], 2, "yellow"]
'''削除した要素は、別の変数に代入することができます。'''
popped_item1 = list.pop() #これで"yellow"を削除しました。
popped_item2 = list.pop() #これで 2 を削除しました。
popped_item3 = list.pop() #これで[1, "purple"]を削除しました。
'''printして確認しましょう。'''
print(popped_item1) #削除した要素が文字列なら文字列として代入されています。
print(popped_item2) #削除した要素が数値なら数値として代入されます。
print(popped_item3) #削除した要素がリストならリストとして代入されます。
print(list) #元のリストからは要素は削除されています。
注意して頂きたいのは、削除した要素を別の変数に代入した時は、その型は、もともとのものを引き継ぐという点です。リスト内の対象の要素が、文字列なら文字列型で代入されますし、数値型なら数値型として、リスト型ならリスト型として代入されます。
なおリストから要素を全部削除して、最終的に空になったリストに対してpop()メソッドを実行するとIndexErrorになります。
list = []
list.pop()
リストが空かどうかは、len()関数で確認することができます。「Pythonのリストの要素数(長さ)を確認する方法」をご覧ください。
余談ですが、こうしたエラーを回避するには、try 構文を使う方法があります。エラーを回避するための例外処理を組み込みます。以下をご覧頂くと分かりやすいと思います。
#試すために空のリストを作ります。
colors = []
#try文の例外処理を組み込みます。
try :
popped_item = colors.pop()
print("色は" + popped_item)
print(colors)
except :
print("エラーになりました。")
詳しくは「Pythonのtry文とexceptによる例外処理」をご覧ください。
また「Pythonのpopでリストや辞書の要素を削除する方法」ではpopメソッドについてより詳しく解説していますので、あわせてご確認ください。
2. 要素を直接指定して削除する | remove()メソッド
要素の並びではなく、削除したい特定の値があって、それを削除したい時は、remove()メソッドを使います。
以下のように書きます。
リスト.remove(要素)
括弧 () の中に入力する引数には、削除したい値を入力します。
実際に見ていきましょう。
'''リストを作ります。'''
list = ["red", "orange", "blue", "green", "yellow"]
'''blueを削除します。'''
list.remove("blue")
'''printして確認しましょう。'''
print(list)
これは分かりやすいですね。
次の例は、リスト内に同じ要素が複数ある場合です。その場合は、remove()メソッドでは、最初の要素だけ削除します。
'''要素が重複している場合は、最初の要素だけ削除します。'''
list = ["red", "orange", "blue", "green", "yellow", "red"] #リストの中に"red"が2つあります。
'''redを削除します。'''
list.remove("red")
'''printして確認しましょう。'''
print(list) #最初に見つかった "red"だけ削除されています。
場合によっては、該当する複数の要素を全て削除したい時もあるでしょう。その場合は、while文を使う方法があります。
'''もしリスト内の同一の要素を全て削除したければwhile文が使えます'''
list = ["red", "orange", "red", "green", "red"] #"red"が3つあります。
while "red" in list :
list.remove("red") #全ての"red"を削除します。
print(list)
while文について、詳しくは、「Pythonのwhile文によるループ処理の基本」をご覧ください。
3. リスト内の全ての要素を削除する | clear()メソッド
リスト内の全ての要素を一度に削除したい場合は、clear()メソッドを使います。使い方は簡単です。
リスト.clear()
実際に見てみましょう。
'''リストを作ります。'''
list = ["red", "orange", "blue", "green", "yellow"]
'''全ての要素を削除します。'''
list.clear()
'''printして確認しましょう。'''
print(list)
これは、特に解説の必要はありませんね。
4. 指定した範囲にある要素を削除する | del 文
ここまでは、リストメソッドを使って、リスト内の要素を削除する方法でした。メソッド以外にもdel 文を使う方法もあります。
書き方は次の通りです。
del リスト [開始位置:終了位置:ステップ]
また、「文字列の抽出方法まとめ」でも、文字列のスライスについて解説しています。
それでは、以下の例をご覧下さい。
様々な例を見るために、先に次のリストを作っておきます。
'''次のリストを作ります。'''
list_1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list_5 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(list_1)
全て同じ要素を持つリストで、要素は下図のようにインデックスされています。
これをもとに、複数の例を一度に見てみましょう。
'''様々な抽出方法を見ていきましょう。'''
del list_1[4:] #開始位置だけを指定すると、そこから最後の要素まで削除します。
del list_2[:5] #終了位置だけを指定すると、そこから前の要素を削除します。
del list_3[2:5] #開始位置と終了位置を指定すると、その間の要素を削除します。
del list_4[2:9:2] #ステップを指定すると、指定した範囲でステップ数置きに削除します。
del list_5[1::2] #開始位置とステップだけ、終了位置とステップだけの指定もできます。
'''printして確認しましょう。'''
print(list_1)
print(list_2)
print(list_3)
print(list_4)
print(list_5)
print(list_6)
いかがでしょうか?ぜひ、自分でも何度も使ってマスターしてみて下さいね。そのための注意点を1つお伝えしておきます。
開始位置は含み、終了位置は含まない
ここで注目して頂きたいことは、開始位置は、そこで指定した要素を含めて始まるのに対し、終了位置は、指定した要素は含まないということです。
例えば、「s[3:7]」では、インデックス番号3番から6番が抽出されます。
開始位置は含まれ、終了位置は含まれないと覚えておきましょう。
5. まとめ
いかがだったでしょうか。
状況に応じて使い分けられるようになれば、立派な中上級者です。リストの操作は、つい普段使っているメソッドや関数ばかりに偏ってしまうものです。困ったときには、別の方法も探せるようになっておくと非常に便利です。
それぞれ、覚えておいて頂ければと思います。
コメント