05-Python

Python(Part.19)| python【リスト(利用編-4)】【リストのメソッド(2/2)】| 現役エンジニア&プログラミングスクール講師

python| まとめ | 現役エンジニア&プログラミングスクール講師「python」のまとめページです。pythonに関して抑えておきたい知識や文法やにについて記事をまとめています。まとめページの下部には「おすすめの学習書籍」「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中...

目標

(pythonの)「リスト」のメソッドを利用して操作する。
pyhotnがもつ単純文のひとつ「del文」を理解する。

(pythonの)「リスト」の操作方法

(pythonの)「リスト」の操作方法(メソッド)再掲載

メソッド:メソッドはクラスやオブジェクトを操作するために、その内部で定義した関数のことです。(他の言語ではメンバー関数と呼ばれたりします。)

ほわほわ

優しく言い換えると、「オブジェクト専用で利用できる関数」といえます。(pythonの)「リスト」でもリストを操作するためのメソッドが、しっかりと準備されています。

これまで「リスト」を作成してきましたが、実はこの時、リスト内の要素に値が設定される以外にも、必要な処理(メソッド)が利用可能な状態になっています。

上のキャプチャの場合、リストの名前を利用して「list_num.append(x)」のようにメソッドを呼び出しリスト「list_num」を操作します。

リストはプログラム内に複数存在する(作成している)かもしれません(タプルやクラスなどのオブジェクトも同様)。この場合に「list_num」への処理なのか、別のオブジェクトへの処理なのかはきちんと明示する必要があります。

例えば「list_num1」「list_num2」「list_num3」の3つのリストが存在したとすると「list_num2」への処理であれば「「list_num2.メソッド」と記述します。明示しない場合は処理として正しく行われません。

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)

リファレンスにある[]ブラケットはプログラム内では使用しません。あくまでも説明として記載されています。(list.index(x[, start[, end]])

list.index(x[, start[, end]]) の end部分はインデックス番号+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)
リストでの x の出現回数を返します。

https://docs.python.org/ja/3.11/tutorial/datastructures.html

引数に指定した値が存在しないときは「0」を返します。エラーにはなりません。

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)
リストの項目を、インプレース演算 (in place、元のデータを演算結果で置き換えるやりかた) でソートします。引数はソート方法のカスタマイズに使えます。 sorted() の説明を参照してください。

https://docs.python.org/ja/3.11/tutorial/datastructures.html

インプレースは演算の結果として新しいオブジェクトを作るのではなく、元のオブジェクトを変化させる演算のことです。

ほわほわ

下の図はインプレースでない処理です。

ほわほわ

下の図はインプレースの処理です。

インプレースな処理では元のデータが変わってしまいます。下のプログラムではオブジェクトの識別番号をid関数を利用して確認しています。結果として同じ識別番号が確認できます。

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メソッド

copyメソッドは「リスト」「集合」「辞書」(ミュータブルなオブジェクト)で実装されているメソッドです。「文字列」「タプル」「range」(イミュータブルなオブジェクト)には実装されていません。イミュータブルオブジェクトには「copyモジュール」を利用します。

list.copy()
リストの浅い (shallow) コピーを返します。a[:] と等価です。

https://docs.python.org/ja/3.11/tutorial/datastructures.html

浅いコピーは「シャローコピー」といいます。このコピーは「値」でなく「参照」をコピーすることになります。

コピーには「シャローコピー」と「ディープコピー」という2通りのコピーがあります。「ディープコピー」については別の記事で扱います。

「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文」はリストの要素を個別に指定することも可能です。この場合、スライス式を利用します。

del文で変数との結びつきを解消されたオブジェクトは、他の変数との結びつきがない場合、メモリが解放され削除されることになります。

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)

今回は以上になります。

「python」おすすめ書籍 ベスト3 | 現役エンジニア&プログラミングスクール講師「python」の学習でお勧めしたい書籍をご紹介しています。お勧めする理由としては、考え方、イメージなどを適切に捉えていること、「生のpython」に焦点をあてて解説をしている書籍であることなどが理由です。勿論、この他にも良い書籍はありますが、特に質の高かったものを選んで記事にしています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST