目標
(pythonの)「リスト」のメソッドを利用して操作する。
pyhotnがもつ単純文のひとつ「del文」を理解する。
(pythonの)「リスト」の操作方法
(pythonの)「リスト」の操作方法(メソッド)再掲載
メソッド:メソッドはクラスやオブジェクトを操作するために、その内部で定義した関数のことです。(他の言語ではメンバー関数と呼ばれたりします。)
優しく言い換えると、「オブジェクト専用で利用できる関数」といえます。(pythonの)「リスト」でもリストを操作するためのメソッドが、しっかりと準備されています。
これまで「リスト」を作成してきましたが、実はこの時、リスト内の要素に値が設定される以外にも、必要な処理(メソッド)が利用可能な状態になっています。
上のキャプチャの場合、リストの名前を利用して「list_num.append(x)」のようにメソッドを呼び出しリスト「list_num」を操作します。
indexメソッド
list.index(x[, start[, end]])
リスト中で x と等しい値を持つ最初の要素の位置をゼロから始まる添字で返します。 該当する要素がなければ ValueError が送出されます。任意の引数である start と end はスライス記法として解釈され、リストの探索範囲を指定できます。返される添字は、start 引数からの相対位置ではなく、リスト全体の先頭からの位置になります。
https://docs.python.org/ja/3.11/tutorial/datastructures.html
indexメソッドを利用すると引数に指定した値が存在するかを確認できます。値が存在する場合は、該当するインデックス番号が返され、存在しなければValueErrorとなります。
次のプログラムでは値「3」のインデックス番号が返されます。要素は先頭から確認されるのでリストな中に同じ値が複数存在する場合は、インデックス番号の若い数値が返されます。
list_num1 = [ 6, 3, 10, 8, 7, 5, 3, 9 ]
print(list_num1.index(3))
実行結果
今回は値「3」はリスト内に2カ所存在しています。このうちインデックス番号の小さい方「1」が返されるようになっています。
indexメソッドでは確認の範囲を指定することもできます。
index(検索する値,検索の開始するインデックス番号,検索を終了するインデックス番号+1)
次のプログラムではインデックス番号「2」から「6」までの範囲を指定しています。
list_num1 = [ 6, 3, 10, 8, 7, 5, 3, 9 ]
print(list_num1.index(3, 2, 7))
実行結果
end の部分は省略して start だけ指定することも可能です。
countメソッド
list.count(x)
https://docs.python.org/ja/3.11/tutorial/datastructures.html
リストでの x の出現回数を返します。
list_num1 = [ 6, 3, 10, 8, 7, 5, 3, 9 ]
print(list_num1.count(3))
print(list_num1.count(4))
実行結果
sortメソッド
list.sort(*, key=None, reverse=False)
https://docs.python.org/ja/3.11/tutorial/datastructures.html
リストの項目を、インプレース演算 (in place、元のデータを演算結果で置き換えるやりかた) でソートします。引数はソート方法のカスタマイズに使えます。 sorted() の説明を参照してください。
インプレースは演算の結果として新しいオブジェクトを作るのではなく、元のオブジェクトを変化させる演算のことです。
下の図はインプレースでない処理です。
下の図はインプレースの処理です。
list_num1 = [ 6, 3, 10, 8, 7, 5, 9 ]
print(list_num1, id(list_num1))
list_num1.sort()
print(list_num1, id(list_num1))
実行結果
reverseメソッド
list.reverse()
https://docs.python.org/ja/3.11/tutorial/datastructures.html
リストの要素を、インプレース演算で逆順にします。
reverseメソッドはsortメソッドと違い昇順・降順ではなく単純に要素を逆転させるメソッドです。
list_num1 = [ 6, 3, 10, 8, 7, 5, 9 ]
print(list_num1, id(list_num1))
list_num1.reverse()
print(list_num1, id(list_num1))
実行結果
copyメソッド
list.copy()
https://docs.python.org/ja/3.11/tutorial/datastructures.html
リストの浅い (shallow) コピーを返します。a[:] と等価です。
浅いコピーは「シャローコピー」といいます。このコピーは「値」でなく「参照」をコピーすることになります。
「copyメソッド」のコピーはシャローコピーなので要素への参照がコピーされます。シャローコピーの動きは次の通りです。
下のプログラムで、リストの変更後の値を確認すると「list_num」と「list_copy」でインデックス「0番目」は別々の値を参照しているのに対して、ネストされたリスト部分「3番目」内の「1番目」は同じ値である「7」への参照を利用しています。
list_num = [ 6, 3, 10, [8, 9]]
list_copy = list_num.copy()
print('要素の変更前')
print(list_num)
print(list_copy)
list_num[ 0 ] = 5
list_num[ 3 ][ 1 ] = 7
print('要素の変更後')
print(list_num)
print(list_copy)
実行結果
del文
「del文」はpythonの単純文で「変数」と「リテラル」の結びつきを解消させることのできる文です。「del文」はリストの要素を個別に指定することも可能です。この場合、スライス式を利用します。
list_num = [ 6, 3, 10, 4, 5, [8, 9, 7], 11]
print(list_num)
# インデックス「2」の値(list_numの「10」)が解放されます。
del list_num[ 2 ]
print(list_num)
# インデックス「1から3」の値(list_numの「3から5部分」)が解放されます。
del list_num[ 1:3 ]
print(list_num)
# 全要素が解放されます。
del list_num[ : ]
print(list_num)
# 変数が削除されます。
del list_num
# 変数がないためエラーとなります。
print(list_num)
今回は以上になります。
ブックマークのすすめ
「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。