ページへ戻る

− Links

 印刷 

Python​/リスト :: XOOPS Cube Site

xpwiki:Python/リスト

Pythonのリストは他の言語で言うところの配列と同じような物で、複数のデータをまとめて扱うのに便利なデータ型です。 ここではリストを使う上での基本的なことについて解説します。

タプルとの違いについては、「Python​/リストとタプル[1]」を、検索や変換については「Python​/リストの検索と変換[2]」もあわせて参照してください。

ページ内コンテンツ
  • リストの初期化
  • よく使う機能
    • 要素へのアクセスと切り出し
    • 要素の追加
    • 要素の削除
    • リストの長さ
    • ループ
    • リストのコピー
    • リストの並べ替え
    • その他

リストの初期化 anchor.png[3] Edit [4]

l = [1,2,3,4,5]

のように定義すると、例えば

for i in l:
    print i

結果

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'>

ただし、あまりいろいろな型を入れると管理が大変になることもあります。

Page Top

よく使う機能 anchor.png[5] Edit [6]

Page Top

要素へのアクセスと切り出し anchor.png[7] Edit [8]

リストの要素へのアクセスは「[]」を使います。一つの要素の取得だけではなく「:」を使うと複数の要素も配列として取り出せます。また、負の数を指定すると最後から数えた要素を取得できます。

l = [1,2,3,4]
print l[0]
print l[0:2]
print l[-1]

結果

1
[1, 2]
4
Page Top

要素の追加 anchor.png[9] Edit [10]

最後に追加するときは「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]
Page Top

要素の削除 anchor.png[11] Edit [12]

単純に削除するなら「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を組み合わせて使うと先入先出、後入先出などのいろいろな順序で要素が追加、削除できます。

Page Top

リストの長さ anchor.png[13] Edit [14]

リストの要素数、またはよく長さと呼ばれる物は、「len」関数で求められます。

l = [1,2,3,4]

print len(l)

結果

4
Page Top

ループ anchor.png[15] Edit [16]

リストの要素についてループするのは以下のようにします。

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の方がすっきりします。

Page Top

リストのコピー anchor.png[17] Edit [18]

リストをコピーするには、「list」を使います。

l = [1,2,3]
l_copy = list(l)
print l_copy

結果

[1, 2, 3]

ただし、要素がリストやクラスのインスタンスなどの時には、実体ではなく参照がコピーされるので注意が必要です。

Page Top

リストの並べ替え anchor.png[19] Edit [20]

昇順に並べ替えるなら「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​/ラムダ式[21]」も参照してください。

Page Top

その他 anchor.png[22] Edit [23]

要素の検索、変換などより高度な話題については「Python​/リストの検索と変換[2]」を参照してください。

他にもリストに関わる機能はとてもたくさんありますが、長くなるのでそれはまたページを改めて記載していく予定です。


Last-modified: 2017-09-04 (月) 13:23:54 (JST) (16d) by njf