LoginSignup
2
2

More than 5 years have passed since last update.

Pythonでちょっとひとてまで独自ソートの実装

Posted at

通常のソート

pythonでListをソートしたい場合、下記のようにsort()関数を使うと簡単にソートしてくれる

>>> l = ['B', 'C', 'A']
>>> l.sort()
>>> print l
['A', 'B', 'C']

しかし、.fileなどのドットを含むファイルリストのソートなどを行うと下記のようにドットを含むファイルが先に並んでしまう。

>>> files = ['file01', 'file02', '.file04', 'file03']
>>> files.sort()
>>> print files
['.file04', 'file01', 'file02', 'file03']

lambda式を使った独自ソート

たとえば、lsコマンドの出力のようにドットを含まない部分でソートしたい場合lambda式を使い下記のようにすると実現できる。

>>> files = ['file01', 'file02', '.file04', 'file03']
>>> sortKey = lambda f: f if not f.startswith('.') else f[1:]
>>> files.sort(key=sortKey)
>>> print files
['file01', 'file02', 'file03', '.file04']

sortKeyでソートのためのkeyの生成方法を指定している。
具体的にはソートの対象をfとして渡し、f.startswith('.')で先頭にドットがある場合は2文字目からを切り出してkeyとしている。

その他の応用

たとえば次のようにすることでファイルのサイズでリストをソートーすることもできる

>>> import os
>>> files = ['file01', 'file02', '.file04', 'file03']
>>> sortKey = lambda f: os.state(f).st_size
>>> files.sort(key=sortKey)
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2