今回は、Pythonの中でも数値型と対比となるコンテナ型の中からリストについて紹介したいと思います。
特徴
pythonのリストとは一般的にいうと動的配列と同等のものになります。しかし、そのほかのプログラミングの動的配列と違っていくつか特徴がありますので、それらについて列挙します。
・リストにはどんな型のオブジェクトでも格納できる(数値、文字列、辞書、関数など)
・リストには異なる型を一緒に格納することができる
・事前にリストの長さを指定する必要はない
・リストの中にさらにリストを入れ子にすることができる
どんな型のオブジェクトでも格納できる
以下のように、aのリストには数値をいれ、bのリストには文字をいれることが出来ます。
>>> a = [1,2,3]
>>> a
[1, 2, 3]
>>> b=['a','b']
>>> b
['a', 'b']
リストに異なる型の値を格納する
以下のようにひとつのリストに数値、文字、文字列を同時に格納することができます。
>>> a=[1,'a',"abc"]
>>> a
[1, 'a', 'abc']
長さを動的に変更する
以下のように『append()』関数を使うとリストの一番最後に指定した値が追加されます。そのため、事前にリストの長さを指定する必要はありません。
>>> a=[1,2,3]
>>> a
[1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]
リストの中にリストを入れ子にできる
以下のようにリストの中にリストを入れ子として格納することが出来ます。さらに入れ子の中の値、今回の場合3を抽出する場合はa[2][0]という書き方で抽出することができます。
>>> a=[1,2,[3,4],5]
>>> a
[1, 2, [3, 4], 5]
>>> a[2][0]
次項からリストの作成、参照、更新、削除などの基本操作について書いていきます。
リストを新しくつくる
リストをつくるには「直接作成する」方法と「list関数を使う」方法があります。
直接作成する
リストは“[“と”]”の括弧でくくることによって新規に作成することが出来ます。
>>> a=[1,'a',2,3]
>>> a
[1, 'a', 2, 3]
また、右辺にはrange関数を使って作成することも出来ます。(下図の例は0~10までを2ステップの値を格納しています。)
>>> a=range(0,10,2)
>>> a
[0, 2, 4, 6, 8]
その他にもスライスと呼ばれる方法で作成することができます。スライスとは下図のように既に作成済みのリストから範囲を指定し、その値を新たなリストとして作成する方法です。
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> b=a[0:10:2]
>>> b
[1, 3, 5, 7, 9]
これは0~9のインデックスの中から2飛びの値をbのリストへコピーしているイメージです。範囲は『開始のインデックス以上終わりのインデックスより小さい』で指定します。そのため、上記のコードでは0以上10より小さい(=0~9)となっています。
また、スライスはインデックスを省略することができます。以下に例を挙げます。
>>> a = [1,2,3,4,5]
>>> a[0:5]
[1, 2, 3, 4, 5]
>>> a[:5]
[1, 2, 3, 4, 5]
>>> a[3:]
[4, 5]
>>> a[-2:]
[4, 5]
関数を使ってつくる(list関数)
次に関数を使ってリストを作成する方法です。これには『list(シーケンス)』関数を使います。作成するというよりは、文字列やリスト、タプルなどをリストに変換する意味合いです。下図のように記述します。
>>> a=list('abcdefg')
>>> a
['a', 'b', 'c', 'd', 'e', 'f', 'g']
リストを参照する
リストの値を参照するにはインデックスを指定して値を参照します。
インデックスで値を指定する
リストのインデックスを指定します。
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> a[5]
6
リストを更新する
リストの指定したインデックスの値を更新する、リストに値を追加・挿入する方法について紹介します。
指定したインデックスの値を更新する(リスト[インデックス]=値)
『リスト[インデックス]=値』で記述します。
>>> a=[1,2,3,4,5]
>>> a[2]=6
>>> a
[1, 2, 6, 4, 5]
上記で説明したスライスという方法を用いて、範囲指定で値の更新をすることも可能です。
リストに値を追加する(append関数とextend関数)
冒頭でも説明しましたが、リストに新しく値を追加するには『.append(値)』を使います。このメソッドは値1個ずつ追加することが可能で、2個以上追加したい場合はこのメソッドを2回呼び出す必要があります。
一度に複数の値を追加するには『.extend(リスト)』を使います。
>>> a=[1,2,3,4,5]
>>> a.extend([6,7])
>>> a
[1, 2, 3, 4, 5, 6, 7]
リストの任意の場所に値を追加する(insert関数)
リストの任意の場所に値を追加するには『.insert(位置,値)』を使います。
>>> a=[1,2,3,4,5]
>>> a.insert(2,6)
>>> a
[1, 2, 6, 3, 4, 5]
リストを削除する
ここでは「リストの値を指定して削除する方法」と「リストのインデックスを指定して削除する方法」について紹介します。
リストの値を指定して削除する(remove関数)
リストの値を指定して削除するには『.remove(値)』を使います。指定した値が見つからなかった場合は、「ValueError」が発生します。
>>> a=[1,2,3,4,5]
>>> a.remove(3)
>>> a
[1, 2, 4, 5]
リストのインデックスを指定して削除する(del関数)
リストのインデックスを指定して削除するには『del リスト[インデックス]』を使います。これもスライスを使って範囲指定で削除することも可能です。
>>> a=[1,2,3,4,5]
>>> del a[2]
>>> a
[1, 2, 4, 5]
よく使うもの
リストの作成、参照、更新、削除の他によく使うものをまとめました。リストに限らず共通なものが多くなっています。
値のインデックスを参照する(index関数)
値からインデックスを参照する(逆引きする)場合には『.index(検索する値、開始位置、終了位置)』を使います。以下のコードは0~9までのインデックスの値の中から5に該当するものがあればそのインデックスを戻り値として返しています。該当する値がない場合は、「valueError」が発生します。
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> a.index(5,0,10)
4
値の数を数える(count関数)
リストの中に指定した値がどれだけあるかをカウントする関数です。これは『.count(数えたい値)』を使います。リストの中の値の数を数えるわけではないので注意してください。
>>> a=[1,2,1,1,2,3,1,3]
>>> a.count(1)
4
指定した値が含まれているか調べる(検索する値 in リスト)
指定した値が含まれているかどうかを調べるには『検索する値 in リスト』を使います。戻り値はTrueかFalseとなります。
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> 5 in a
True
リストの長さを参照する(len関数)
リストの中の数を数えるには『len(リスト)』を使います。for文やwhile文などで登場することが多々あるかと思います。
>>> a=[1,2,3,4,5,6,7,8,9,10]
>>> len(a)
10
まとめ
・他のプログラミング言語でいう動的配列
・値はどんな型でもOK
・直接指定と関数での2種類でつくれる
以上。