この連載では、Pythonについて色々な形で再学習に取り組んでいます。前回の記事はこちらになります。 hirocom777.hatenadiary.org 前回は、リストについて学びました。リストは複数の値をまとめて管理できます。
今回もリストについて学んでいきたいと思います。
要素の追加
リストにデータを追加する場合は、リストオブジェクトのappendメソッドを使います。appendメソッドは指定したオブジェクトをリストに追加します。 リストのインデックスを指定すると、指定されたインデックスの要素を返すと同時にリストから削除します。
l_1 = ['A','B','C'] l_1.append('D') print(l_1) # ['A', 'B', 'C', 'D']を返す
これは、前回ご紹介したリスト同士の結合とは作用が少し異なります。結合の場合には新しいオブジェクトを作成することになりますが、appendメソッドでは既存のオブジェクトの修正となります。
オブジェクトが新規に作成されているのか、修正されているのかはid関数でわかります。Pythonでは、すべてのオブジェクトに「オブジェクトID」と呼ばれる一意の識別子が割り当てられます。id関数を使用するとオブジェクトに割り当てられたオブジェクトIDが取得できます。
appendメソッドでデータを追加してみましょう。
l_1 = ['A','B','C'] print(id(l_1)) # 2714695515200(環境により異なる)を返す l_1.append('D') print(id(l_1)) # 2714695515200(同じID)を返す
この様にデータ追加後もオブジェクトIDは変わりません。オブジェクト自体を修正できています。累算代入演算子「+=」を使っても、同じことが可能です。
l_1 = ['A','B','C'] print(id(l_1)) # 2714695515200(環境により異なる)を返す l_1 += ['D'] print(id(l_1)) # 2714695515200(同じID)を返す
つづいて、リスト同士を結合してみます。
l_1 = ['A','B','C'] print(id(l_1)) # 1787313004736(環境により異なる)を返す l_1 = l_1 + ['D'] print(id(l_1)) # 1787313591616(上と異なるID)を返す
データを追加した、新しいオブジェクトが作成されたことがわかります。この様に、リストオブジェクトは内容を修正できます。これをミュータブルなオブジェクトと呼びます。文字列型はこの様な修正ができません。これをイミュータブルなオブジェクトと呼びます。
また、リストの最後に追加するのではなく任意の場所に追加したい場合は、insertメソッドを使います。以下のように記述します。
リスト.insert(挿入位置,挿入する値)
挿入位置には挿入したいリストのインデックス位置を指定します。0にすると、リストの先頭にデータを挿入します。
l_1 = ['A','B','C'] l_1.insert(1,'X') print(l_1) # ['A', 'X', 'B', 'C']を返す
こちらもリストオブジェクトの修正となります。
要素の削除
リストの要素を削除する場合は、del文を使って削除するインデックスを指定します。スライスを使って複数の要素を削除することもできます。
l_1 = ['A','B','C','D','E'] del l_1[0] print(l_1) # ['B', 'C', 'D', 'E']を返す del l_1[1:3] print(l_1) # ['B', 'E']を返す
popメソッドを使っても削除できます。popメソッドでリストのインデックスを指定すると、指定されたインデックスの要素を返すと同時にリストから削除します。
l_1 = ['A','B','C'] print(l_1.pop(1)) # Bを返す print(l_1) # ['A', 'C']を返す
これもリストオブジェクトの修正です。
要素数の取得
リストの要素数を取得するには、len関数を使います。
print(len(['A','B','C'])) # 3を返す
len関数は文字列型など、他のオブジェクトでも使用できる物があります。
リスト内包表記
決まったの規則の値を持つリストを作成する方法として、リスト内包表記があります。1~10を要素として持つリストは、for文を使用すると作成できます。
l_1 = [] for i in range(1,11): l_1.append(i) print(l_1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
これをリスト内包表記を使って以下の様に記述されます。
l_1 = [i for i in range(1,11)] print(l_1) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
リスト内包表記は以下のように記述します。
[式 for 変数 in イテラブル if 条件式]
最後のif文を記述すると、条件式が成立したときだけリストに要素を追加します。上の出力を奇数だけにしたい場合は、以下のように記述します。
l_1 = [i for i in range(1,11) if i%2] print(l_1) # [1, 3, 5, 7, 9]
式に三項演算子というものを使用する方法もあるのですが、これは別途ご紹介したいと思います。
次回はタプル
いかがでしょうか。リストの扱いはPythonの基本でもあると思います。しっかりマスターしたいと思います。次回はタプルを学ぼうと思います。お楽しみに!!