トップ 一覧 検索 ヘルプ RSS ログイン

リストメモ.pyの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{category Python}}
!!! リストとは
可変のシーケンス型オブジェクト。
要素として任意の型のオブジェクトを格納することができる。
リストの要素は順番を持つ。


スライス、結合が可能。

角括弧で作成する。


!!! リストのキューイング
!! shift
shiftはスライスを使わなくても、pop()メソッドの引数を0に指定することで簡単に実現できる。
r = a.pop(0)

!! unshift
unshiftはスライスで実現できるが、要素が1個の場合は insert(0, x) が使える。
unshiftはスライスで実現できるが、挿入したい要素が1個の場合は insert(0, x) が使える。

リストの先頭に要素1を挿入。
a.insert(0, 1)
a[:0] = [1]

リストの先頭にリストを拡張挿入。
a[:0] = [1, 2]

!! push
リストの末尾に要素5を挿入。
a.append(5)

リストの末尾にリストを拡張挿入。
a.extend([5, 6])

!! pop
r = a.pop()


!!! リストのコピー
Pythonでは変数に代入をしても、オブジェクトへの参照がコピーされるだけなので、すべての変数が同じオブジェクトを指す。

 a = [0, 1, 2, 3]
 
 # aを破壊したいので、破壊用に変数bにコピー
 b = a
 b[2:4] = [5, 6]
 
 # print(a) shows [0, 1, 5, 6]

これだと、bを破壊するとaも破壊される(aとbが参照しているオブジェクトは同じだから)。
リストをコピーするには、スライスの全要素参照を使う。

 b = a[:]

a[:]は、aと同じ値の要素を持つ、別のリストオブジェクトを返す。



!!! リストのクリア
 a[:] = []
リスト全てを表すスライスを左辺、空リストを右辺。


!!! リストのソート
* list.sort()
* sortedlist = sorted(list)

!! keyオプション
sort()、sorted()には key オプションを指定できる。keyオプションに指定できるのは、元のリストからどう比較値を抜き出すかを定義した関数。

文字列のリストを大文字小文字を意識せずに比較したい:
 str_list.sort(key=str.lower)

入れ子リストのソート:
特に何も指定しなければ、各要素シーケンスの0番目の値から順番に比較が行われる。シーケンスの任意の要素順でソートしたい場合は下記のように、比較したい順を並び替えた要素を返す関数を key 引数に指定する。
並び替える要素として、元のシーケンスの要素個分を返す必要はない。比較したい要素だけを並び替えて返せばよい。

 t_list = [('key1', 5), ('key2', 10), ('key3', 7), ('key4', 8), ('key5', 2)]
 sorted_list = sorted(t_list, key=lambda x:(x[1], x[0]))

keyに指定した関数にリストの値が与えられ、その返り値同士が比較される。
Python 3では比較可能でないオブジェクト同士を比較すると、例外が発生する。

!! reverseオプション
降順でソートする。
 a_list.sort(reverse=True)

!!! ディクショナリーとリストの相互変換
!! ディクショナリーをリストに展開する
リスト内包表記を使う。
 pair_list = [x for x in d.items()]

「キーと値のタプル」のリストができる。
[(key0, value0),(key1, value1),(key2, value2),...] みたいな感じ。

!! キーと値のタプルのリストをディクショナリーにする
ディクショナリーでも内包表記が可能に。上のように展開したキーと値のタプルのリストを、元のディクショナリーに戻す。
 d = {x[0]:x[1] for x in pair_list}

内包表記は set でも使えるとのこと。

!! キーのリストと値のリストからディクショナリーを作る
キーのリスト [key0, key1, key2, ...] と値のリスト [value0, value1, value2, ...]からディクショナリーを作る。
zip()を使う。
 d = {x:y for x,y in zip(keys, values)}

!! キーと値がならんだリストをディクショナリーにする
 a = [key0, value0, key1, value1, key2, value2,...]

これは、一度キーだけのタプル、値だけのタプルを作って、上記の内包表記で処理する。
 keytup = a[0::2]
 valuetup = a[1::2]
 d = {x:y for x,y in zip(keytup, valuetup)}

一行版
 d = {x:y for x,y in zip(a[0::2], a[1::2])