Pythonでアルファベット順にソートされたリストを作成するには、どのような方法がありますか?
基本的な答えです。
mylist = ["b", "C", "A"]
mylist.sort()
これは、元のリストを変更します(つまり、その場でソートします)。元のリストを変更せずにソートされたコピーを得るには、sorted()
関数を使います。
for x in sorted(mylist):
print x
しかし,上記の例は,ロケールを考慮しておらず,大文字と小文字を区別してソートを行っているため,少し素朴です。オプションのパラメータ key
を利用して、カスタムのソート順を指定することができます(cmp
を使用するという代替案は、複数回評価する必要があるため、非推奨のソリューションです。
そこで、言語固有のルールを考慮して、現在のロケールに従ってソートします(cmp_to_key
はfunctoolsのヘルパー関数です)。
sorted(mylist, key=cmp_to_key(locale.strcoll))
そして最後に,必要であれば,ソートのために[カスタムロケール][3]を指定することができます.
import locale
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') # vary depending on your lang/locale
assert sorted((u'Ab', u'ad', u'aa'),
key=cmp_to_key(locale.strcoll)) == [u'aa', u'Ab', u'ad']
最後に、lower()
メソッドを使った大文字小文字を区別しないソートの例を見かけることがありますが、これはASCII文字のサブセットに対してのみ動作するため、正しくありません。この2つは、英語以外のデータに対しては間違っています。
# this is incorrect!
mylist.sort(key=lambda x: x.lower())
# alternative notation, a bit faster, but still wrong
mylist.sort(key=str.lower)