Pythonのpopメソッドは、リスト(list)や辞書(dict)の任意の要素を削除する時に使うものです。リストと辞書の場合、書き方が少々異なるので、ここでしっかり理解しておきましょう。
1. Pythonのpopメソッドの使い方
Pythonのpopメソッドの書き方は次の通りです。
''' popメソッドの書き方'''
#リストに使う場合
リスト.pop(インデックス番号)
#辞書に使う場合
辞書.pop(キー, デフォルト値)
リストの場合は削除したい要素のインデックス番号を、辞書の場合は削除したい要素のキーを書きます。辞書のデフォルト値については、後述します。
popメソッドの重要なポイントは次の2つです。
- メソッドを実行すると元のリストや辞書が変わる(要素が削除される)。
- popメソッドは返り値として削除した要素を返す。
これから多くの例を元に解説するので、この2点をしっかり理解するよう心がけましょう。
2. Pythonのlistのpop
それではリストにpopメソッドを使ってみましょう。
2.1. Pythonのpop()の引数を空白にした場合
早速、以下のコードをご覧ください。
# プログラミング言語のリスト
language = ['Python', 'Ruby', 'Java', 'C', 'English']
# popメソッドの引数が空白の場合、末尾の要素を削除します。
print('削除前のリスト:', language)
popped_list = language.pop()
print('削除した要素(返り値):', popped_list)
print('削除後のリスト:', language)
まず、popped_list = language.pop() で、popメソッドの返り値を変数popped_listに代入しています。結果、リストから末尾の要素’Englsh’が削除されて変数popped_listに代入され、元のリスト’language’からは、それが削除されていることが確認できますね。
ここでは、まず以下の点をおさえておきましょう。
- pop()の引数を空白にすると末尾の要素が削除される。
- pop()メソッドの返り値は削除した要素であり、これは別の変数に代入することができる。もちろん別の変数に代入しなくても良い。(2つ後の例からは代入せず、そのまま返り値として表示する)。
- pop()メソッド実行後は元のリストから要素が削除されている。
2.2. Pythonのpop()の引数にインデックス番号を指定した場合
次に、pop()の引数に、削除したい要素のインデックス番号を入れてみましょう。次の例をご覧ください。
# インデックス番号を指定すると任意の要素を削除することができます。
print('削除前のリスト:', language)
popped_list = language.pop(2) # インデックス番号2番の要素を削除
print('削除した要素(返り値):', popped_list)
print('削除後のリスト:', language)
pop()メソッドの引数に渡したインデックス番号の要素が削除されていることがわかりますね。なお、インデックス番号は前から数える時は0から始まり、後ろから数える時は-1から始まります。うっかり見落としがちなので、再度確認しておきましょう。
上記の例では、インデックス番号2番の’Java’が削除されていることが分かりますね。
なお、pop()の引数には後ろから数えたインデックス番号を渡すこともできます。以下のコードをご覧ください。
# 後ろから数えたインデックス番号でも指定できます。
language = ['Python', 'Java', 'C++', 'Ruby', 'C']
# 引数が空白の場合は末尾の要素を削除
print('引数が空白の場合は、')
print('削除された要素:', language.pop())
print('削除後のリスト: ', language)
# 引数が-1なら末尾の要素を削除
print('\n引数に-1を渡した場合は、')
print('削除された要素(返り値) ', language.pop(-1))
print('削除後のリスト:', language)
# 引数が-3なら最後から3つ目の要素を削除
print('\n引数に-3を渡した場合は、')
print('削除された要素(返り値) ', language.pop(-3))
print('削除後のリスト:', language)
詳しく解説しますね。
まず、最初のlanguage.pop()では、引数を渡していないので自動的に末尾の要素である’C’が削除されています。popメソッド実行時の返り値はCで、実行後のリストではCが削除されていますね。
2回目のlanguage.pop(-1)実行時はインデックス番号は次のようになっています。この時インデックス番号-1を指定してるので、また末尾の要素が削除されます(実は空白の時、つまりpopメソッドのデフォルト時は-1が設定されています)。
結果、2回目のpopメソッド実行時の返り値はRubyで、実行後のリストではRubnyが削除されました。
続いて3回目のlanguage.pop(-3)実行時のインデックス番号は次のようになっています。今回はインデックス番号-3を指定しているので、Pythonが削除されてpopメソッドによって返されています。そして、リストからはPythonが削除されて、最終的なリストは[‘Java’, ‘C++’]となりました。
2.3. Pythonのpop()でインデックス番号が存在しない場合と空の場合
存在しないインデックス番号を指定したり、空になったリストにpop()を実行するとインデックスエラーになるということも覚えておきましょう。
# 存在しないインデックス番号を指定するとエラー
language = ['Python', 'Java', 'C++', 'Ruby', 'C']
language.pop(6)
# 空になったリストにpopメソッドを実行してもエラー
empty = []
empty.pop()
2.4. Pythonのpop()を多次元リストに使う場合
それでは、多次元リストにpop()を実行した場合はどうなるでしょうか。次のコードをご覧ください。
# 多次元リストの場合
multi_list = [[1, 2] , [3, 4], [5, 6]]
print('削除前のリスト:', multi_list)
print('削除された要素(返り値):', multi_list.pop())
print('削除後のリスト:', multi_list)
popメソッドでは、引数に[-1][0](=5)というように多次元の要素を指定することはできません。あくまでも1次元での指定になるので、この例では、最後(-1)のインデックスの要素である[5, 6]が削除されます。
これは3次元リストや4次元リストなど、どれだけ多次元になっても変わりません。次のコードをご覧ください。
# 3次元リスト
tri_list = [[1, 2] , [3, 4], [[5, 6], [7, 8]]]
print('削除前のリスト:', tri_list)
print('削除された要素(返り値):', tri_list.pop())
print('削除後のリスト:', tri_list)
pop()の引数は空白なので、デフォルトの-1が削除されます。この3次元リストではインデックス番号-1は、[[5, 6], [7, 8]]ですので、それが削除されています。
なお、Pythonのリストのインデックス番号に関しては『Pythonのリストからの要素の取り出し方法のまとめ』でも詳しく解説しているので、ぜひご覧ください。
3. Pythonのdictのpop
popメソッドは辞書に対しても使うことができます。冒頭でも紹介しましたが、辞書の場合は次のように、削除したい値のキーを、pop()の引数に渡します。
デフォルト値はオプションで、指定したキーが存在しなかった場合の返り値を設定するものです。
''' popメソッドの辞書に使う場合の書き方'''
辞書.pop(キー, デフォルト値)
それでは早速見ていきましょう。
3.1. Pythonのdictはpop()に渡したキーとそれに対応する値を削除
次のコードをご覧ください。
''' 辞書の要素をpopメソッドで削除'''
sales = {'apple':2, 'orange':3, 'grapes':4}
print('削除前の辞書:', sales)
popped_element = sales.pop('apple') # key'apple'を指定して削除
print('削除された要素(返り値):', popped_element)
print('削除後の辞書:', sales)
popped_element = sales.pop(‘apple’)で、popメソッドの実行結果を変数popped_elementに代入しています。結果、辞書から指定のキー’apple’とその値が削除されていますね。
また辞書にpopメソッドを使った場合、元の辞書からはpop()に渡したキーとそれに対応する値が削除されます。しかし、辞書へのpopメソッドの実行時の返り値は辞書の値だけ(この場合は2だけ)という点をおさえておきましょう。
3.2. Pythonのdictのpop()に存在しないキーを指定した場合
辞書のpopメソッドに存在しないキーを指定した場合はキーエラーになります。リストのpopメソッドの時はインデックスエラーでしたね。辞書のpop()の場合と、リストのpop()の場合ではエラーの内容が異なるということを頭の隅に入れておきましょう。
''' 存在しないキーを指定した場合 '''
sales = {'apple':2, 'orange':3, 'grapes':4}
sales.pop('banana')
3.3. Pythonのdictのpop()にデフォルト値を指定した場合
ただし、辞書のpop()の第二引数にデフォルト値を入れていた場合、第一引数で存在しないキーを指定した場合は、pop()の実行結果として、デフォルト値が返り値となり、元の辞書には何も変化は加えられません。
以下のコードで確認しておきましょう。
''' デフォルト値を設定していた場合'''
sales = { 'apple': 2, 'orange': 3, 'grapes': 4 }
element = sales.pop('banana', 'peach')
print('削除された要素(返り値):', element) # 存在しない場合デフォルト値を返す。
print('削除後の辞書:', sales)
4. まとめ
リストのpop()では引数に削除したい要素のインデックス番号を入れます。辞書のpop()には引数に削除したい要素のキーを入れます。辞書の場合は、キーが存在しなかった場合の返り値のデフォルトを第二引数に渡すことができます。
双方とも、指定の要素を削除した新しいリストや辞書を作るのではなく、元のリストや辞書から要素を削除するという点をしっかり理解しておきましょう。また、popメソッドの返り値は削除した要素です。この点も覚えておきましょう。
これらは使う機会も少なくないので、実際に自分でコードを書いて慣れておくと良いでしょう。
コメント