1: 2016-12-27 (火) 09:39:28 njf |
2: 2016-12-27 (火) 12:04:26 njf |
- | *リストの初期化 [#x9b404ce] | |
- | | |
| Pythonのリストは他の言語で言うところの配列と同じような物で、複数のデータをまとめて扱うのに便利なデータ型です。 | | Pythonのリストは他の言語で言うところの配列と同じような物で、複数のデータをまとめて扱うのに便利なデータ型です。 |
| + | ここではリストを使う上での基本的なことについて解説します。 |
| + | |
| + | タプルとの違いについては、「[[Python/リストとタプル]]」を、検索や変換については「[[Python/リストの検索と変換]]」もあわせて参照してください。 |
| + | |
| + | |
| + | *リストの初期化 [#x9b404ce] |
| | | |
| l = [1,2,3,4,5] | | l = [1,2,3,4,5] |
| | | |
| のようにしてループすることができます。 | | のようにしてループすることができます。 |
| + | |
| + | リストの初期化は上記のように実際の値を入れることもできますし、 |
| + | |
| + | l = [] |
| + | |
| + | のように空のリストを作ることもできます。また全て同じ要素で初期化するなら |
| + | |
| + | l = [0] * 10 |
| + | |
| + | のようにも書けます。2つの要素の繰り返しなら、 |
| + | |
| + | l = [0,1] * 10 |
| + | |
| + | と書く事も可能です。 |
| + | |
| + | C言語などとは異なり、型が異なっていても同一のリストに格納できます。 |
| + | |
| + | l = [1,"2",u"3"] |
| + | for i in l: |
| + | print type(i) |
| + | |
| + | 結果 |
| + | <type 'int'> |
| + | <type 'str'> |
| + | <type 'unicode'> |
| + | |
| + | ただし、あまりいろいろな型を入れると管理が大変になることもあります。 |
| + | |
| + | *よく使う機能 [#h1339413] |
| + | |
| + | **要素へのアクセスと切り出し [#xf125ecf] |
| + | |
| + | リストの要素へのアクセスは「[]」を使います。一つの要素の取得だけではなく「:」を使うと複数の要素も配列として取り出せます。また、負の数を指定すると最後から数えた要素を取得できます。 |
| + | |
| + | l = [1,2,3,4] |
| + | print l[0] |
| + | print l[0:2] |
| + | print l[-1] |
| + | |
| + | 結果 |
| + | 1 |
| + | [1, 2] |
| + | 4 |
| + | |
| + | **要素の追加 [#vfe3fc48] |
| + | 最後に追加するときは「append」を使います。 |
| + | |
| + | l = [1,2,3] |
| + | l.append(4) |
| + | print l |
| + | 結果 |
| + | [1, 2, 3, 4] |
| + | |
| + | 好きな場所に追加するときは「insert」を使います。第一引数がインデックス、第二引数が追加する要素です。 |
| + | |
| + | l = [1,2,3] |
| + | l.insert(1,10) |
| + | print l |
| + | |
| + | 結果 |
| + | [1, 10, 2, 3] |
| + | |
| + | **要素の削除 [#c08c4b96] |
| + | |
| + | 単純に削除するなら「del」を使います。 |
| + | |
| + | l = [1,2,3] |
| + | del l[2] |
| + | print l |
| + | |
| + | 結果 |
| + | [1, 2] |
| + | |
| + | 「:」を使うと二つ以上同時に消す事も可能です。 |
| + | l = [1,2,3] |
| + | del l[0:2] |
| + | print l |
| + | |
| + | 結果 |
| + | [3] |
| + | |
| + | |
| + | 実際には、単に消すだけではなく、消した要素を取り出したいときが多いと思います。その時には「pop」を使います。 |
| + | |
| + | 引数にインデックスを指定するとその要素が、指定しなければ最後の要素が消され、消した要素を返します。 |
| + | |
| + | l = [1,2,3] |
| + | d = l.pop() |
| + | print l,d |
| + | |
| + | 結果 |
| + | [1, 2] 3 |
| + | |
| + | これとappend、insertを組み合わせて使うと先入先出、後入先出などのいろいろな順序で要素が追加、削除できます。 |
| + | |
| + | **リストの長さ [#g2e98eb1] |
| + | |
| + | リストの要素数、またはよく長さと呼ばれる物は、「len」関数で求められます。 |
| + | |
| + | l = [1,2,3,4] |
| + | |
| + | print len(l) |
| + | |
| + | 結果 |
| + | 4 |
| + | |
| + | |
| + | **ループ [#h3f03707] |
| + | リストの要素についてループするのは以下のようにします。 |
| + | l = [1,2,3] |
| + | for i in l: |
| + | print i |
| + | 結果 |
| + | 1 |
| + | 2 |
| + | 3 |
| + | インデックスも一緒に取得する場合は「enumerate」を使います |
| + | |
| + | l = [1,2,3] |
| + | for i,d in enumerate(l): |
| + | print i,d |
| + | |
| + | 0 1 |
| + | 1 2 |
| + | 2 3 |
| + | |
| + | 他の言語を知っていると、 |
| + | for i in range(len(l)): |
| + | print l,l[i] |
| + | のように書きたくなりますが、enumerateの方がすっきりします。 |
| + | |
| + | **リストの並べ替え [#k95a4ef4] |
| + | |
| + | 昇順に並べ替えるなら「sort」を使います。 |
| + | sortは元のリストを変更します。 |
| + | |
| + | l = [2,1,3] |
| + | l.sort() |
| + | print l |
| + | |
| + | 結果 |
| + | [1, 2, 3] |
| + | |
| + | 元のリストを変更せずに新しい並べ替えられたリストがほしいときは、「sorted」関数を使います。 |
| + | |
| + | l = [2,1,3] |
| + | l_sorted = sorted(l) |
| + | print l |
| + | print l_sorted |
| + | |
| + | 結果 |
| + | [2, 1, 3] |
| + | [1, 2, 3] |
| + | |
| + | sort、sorted関数共に逆順にするなら「reverse=True」を引数で指定します。 |
| + | |
| + | l = [2,1,3] |
| + | l.sort(reverse=True) |
| + | print l |
| + | 結果 |
| + | [3, 2, 1] |
| + | |
| + | 「cmp」引数に関数を指定することで複雑なルールの並べ替えも可能です。 |
| + | 関数は2つの引数をとり、実際には要素が代入されます。 |
| + | その戻り値が正なら最初の引数の要素が大きいと判断して昇順に並べます。 |
| + | 以下の例では文字列の2文字目を整数にした場合の昇順に並べ替えます。 |
| + | |
| + | l = ["123","514","792"] |
| + | |
| + | l.sort(cmp = lambda x,y : int(x[1]) - int(y[2]) ) |
| + | |
| + | print l |
| + | |
| + | 結果 |
| + | ['514', '123', '792'] |
| + | |
| + | |
| + | ラムダ式については「[[Python/ラムダ式]]」も参照してください。 |
| + | |
| + | **その他 [#l3e9b664] |
| + | |
| + | 要素の検索、変換などより高度な話題については「[[Python/リストの検索と変換]]」を参照してください。 |
| + | |
| + | 他にもリストに関わる機能はとてもたくさんありますが、長くなるのでそれはまたページを改めて記載していく予定です。 |