Pythonの多次元リストを指定の要素でソートする

スポンサード リンク
LINEで送る
Pocket

Pythonのソートにはリストのメソッドであるsort()と独立な関数sorted()がある。

2つの違いはリストに限定されるかどうかだけではなく,以下の実行例を見ればわかるようにsort()はリストの内容を書き換え,sorted()は書き換えることはないことが挙げられる。

>>> list = [1,5,2,0]
>>> list.sort()
>>> print list
[0, 1, 2, 5]
>>> list = [1,5,2,0]
>>> print sorted(list)
[0, 1, 2, 5]
>>> print list
[1, 5, 2, 0]

sort()の第1引数は比較に用いる関数であり,第2引数(key)は比較する値を返す関数である。list.sort(key=lambda x:(x[0],x[2]))と指定するとlistの第0要素と第2要素を持つタプルを比較対象として渡すことができる。

sort()の第一引数に何も指定しないとcmp関数を用いる。cmp関数にタプルを指定すると第0要素から順番に比較していってくれるので下の記述で第0要素が等しい場合は第2要素を比較した準位でソートすることができる。

# 特に指定しないと第0要素から順に比較する
>>> list = [[1,7,3,4],[1,2,1,2],[2,9,3,5],[1,1,3,2]]
>>> list.sort()
>>> print list
[[1, 1, 3, 2], [1, 2, 1, 2], [1, 7, 3, 4], [2, 9, 3, 5]]
# 第0要素と第2要素で比較する
>>> list = [[1,7,3,4],[1,2,1,2],[2,9,3,5],[1,1,3,2]]
>>> list.sort(key=lambda x:(x[0],x[2]))
>>> print list
[[1, 2, 1, 2], [1, 7, 3, 4], [1, 1, 3, 2], [2, 9, 3, 5]]

関連する記事

LINEで送る
Pocket



カテゴリー: Python, 未分類 パーマリンク

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>
また,TeX の記法で数式を入力する場合は [latexpage] とコメントの最初に入力してください(QuickLaTeX の機能です)。
例: [latexpage] $\frac{1}{2}$

ERROR: si-captcha.php plugin: GD image support not detected in PHP!

Contact your web host and ask them to enable GD image support for PHP.

ERROR: si-captcha.php plugin: imagepng function not detected in PHP!

Contact your web host and ask them to enable imagepng for PHP.