Pythonのlistについてまとめています。
python list/リスト要素の基本操作
Pythonの配列変数は「リスト」と呼ばれています。リスト名[要素番号]という指定で値にアクセス可能です。
Python 3.6.8 (default, Oct 7 2019, 12:59:55) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> mylist=["a", "b", "c"] >>> print ( mylist ) ['a', 'b', 'c'] >>> print ( mylist[0] ) a >>> print ( mylist[1] ) b #リストの3番めは配列の範囲外なので、エラーになる >>> print ( mylist[3] ) Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
Pythonのリストの追加
リストに養素を追加するには、リスト名.appendを使います。
養素は、リストの一番最後に追加されます。
>>> print( mylist ) ['a', 'b', 'c'] >>> mylist.append('d') >>> print( mylist ) ['a', 'b', 'c', 'd']
Pythonのリスト要素の更新
リスト養素の値を更新するには、要素番号を指定して値を代入します。
>>> print( mylist ) ['a', 'b', 'c', 'd'] >>> mylist[2]='ccc' >>> print( mylist ) ['a', 'b', 'ccc', 'd']
リストの任意の位置に要素を挿入するには、リスト名.insert( 要素番号, 値 ) を実行します。
>>> print( mylist ) ['a', 'b', 'c', 'd', 'e'] >>> mylist.insert(3,'ccc') >>> print( mylist ) ['a', 'b', 'c', 'ccc', 'd', 'e']
リストの最後に、別のリストを連結するには、リスト名.extend( リスト名 ) を実行します。
>>> mylist = ['a', 'b', 'c', 'd', 'e'] >>> mylist2 = ['f', 'g', 'h', 'i'] >>> print( mylist ) ['a', 'b', 'c', 'd', 'e'] >>> mylist.extend(mylist2) >>> print( mylist ) ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
Pythonのリストの削除
リストの要素を削除するには2つの方法があります。
del リスト名[要素番号]で、指定した位置の要素を削除します。
また、リスト名.remove(値) を実行すると、指定した値の要素を削除します。
>>> print( mylist ) ['a', 'b', 'ccc', 'd'] # delは要素番号を指定して要素削除 >>> del mylist[2] >>> print( mylist ) ['a', 'b', 'd'] # removeは要素値を指定して養素削除 >>> mylist.remove('d') >>> print( mylist ) ['a', 'b']
Pythonのリストの範囲指定(スライス)
:(コロン)を使った要素番号指定で、要素番号の範囲指定が可能です。
>>> mylist = ['a', 'b', 'c', 'd', 'e'] >>> print( mylist ) ['a', 'b', 'c', 'd', 'e'] #範囲指定 要素番号1~3 >>> print( mylist[1:3] ) ['b', 'c'] #範囲指定 要素番号3以前 >>> print( mylist[:3] ) ['a', 'b', 'c'] #範囲指定 要素番号2以降 >>> print( mylist[2:] ) ['c', 'd', 'e'] #範囲指定 要素番号1~4を2つ飛ばし >>> print( mylist[1:4:2] ) ['b', 'd'] #全要素 >>> print( mylist[:] ) ['a', 'b', 'c', 'd', 'e']
Pythonのリストのコピー
リストのコピーは、リスト名1=リスト名2[:]でおこないます。
単純にリスト名1=リスト名2とすると、データの実体は同じものになってしまい、値を書き換えるとコピー元も書き換わってしまいます。
>>> print( mylist ) ['a', 'b', 'c', 'd', 'e'] #この記述はコピーにならない(データの実体は同じ) >>> mylist2 = mylist >>> print(mylist2) ['a', 'b', 'c', 'd', 'e'] >>> mylist2[1]='bbb' >>> print( mylist2 ) ['a', 'bbb', 'c', 'd', 'e'] #mylist2を更新すると、mylistの内容も書き換わっている >>> print( mylist ) ['a', 'bbb', 'c', 'd', 'e']
こちらの例では、コピー後に要素を書き換えてもコピー元はもとのまま。全要素がまるごと別のリストとしてコピーされます。
>>> mylist = ['a', 'b', 'c', 'd', 'e'] >>> mylist2 = mylist[:] >>> mylist2[1]='bbb' >>> print( mylist2 ) ['a', 'bbb', 'c', 'd', 'e'] #mylist2を書き換えても、mylistの内容はそのまま >>> print( mylist ) ['a', 'b', 'c', 'd', 'e']
Pythonのリストの内包表記
Pythonのリストを生成する場合に、内包表記という記述方法があります。
$ cat pylist.py #!/usr/bin/python3 list=[x for x in range(0,10)] print( list )
初見だと、え?何やってんのコレ?という感じですよね。理屈よりも、そういうもんだと思って覚えてしまう方がいいかも。リストを表す[]の中身に、for文が入っている形です。
関連 Pythonのfor文
実行するとこうなります。
$ ./pylist.py [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2次元配列の場合だと、こう記述します。
$ cat pylist2.py #!/usr/bin/python3 list=[[x for x in range(0,10)] for y in range(0,3)] print( list )
実行するとこうなります。
$ ./pylist2.py [[0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]]
この内包表記、コードの見た目がスッキリする以上に、処理が高速化するという効果があります。
処理内容によっては、速度が倍違ってくるということもあるそう。
なんかめんどくさそう…と思っても処理速度が倍違うなら覚える価値ありですね。
Pythonのlist まとめ
- pythonのリストは、追加、修正、削除が可能
- pythonのリストは:(コロン)によるスライスで範囲指定が可能
- リストのコピーは[:]指定でおこなう