Python でアルファベット順に並べられたリストを作成する最適な方法は何ですか?
ベストアンサー1
基本的な答え:
mylist = ["b", "C", "A"]
mylist.sort()
これは元のリストを変更します(つまり、その場でソートします)。元のリストを変更せずにソートされたリストのコピーを取得するには、sorted()
関数:
for x in sorted(mylist):
print x
ただし、上記の例はロケールを考慮せず、大文字と小文字を区別して並べ替えを行うため、少し単純です。オプションのパラメータを利用して、カスタムのkey
並べ替え順序を指定できます (代わりに を使用する方法はcmp
、複数回評価する必要があり、key
要素ごとに 1 回しか計算されないため、非推奨のソリューションです)。
したがって、言語固有のルールを考慮して、現在のロケールに従って並べ替えるには(cmp_to_key
functools のヘルパー関数です):
sorted(mylist, key=cmp_to_key(locale.strcoll))
最後に、必要に応じて、カスタムロケール並べ替え:
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)