1. ホーム
  2. パイソン

[解決済み】文字列のリストをソートする方法は?

2022-03-24 23:54:48

質問

Pythonでアルファベット順のリストを作成する最も良い方法は何ですか?

どのように解決するのですか?

基本的な答えです。

mylist = ["b", "C", "A"]
mylist.sort()

これは、元のリストを変更します (つまり、インプレースでソートします)。元のリストを変更せずに、ソートされたリストのコピーを取得するには sorted() 関数を使用します。

for x in sorted(mylist):
    print x

しかし、上記の例はロケールを考慮せず、大文字小文字を区別してソートしているため、少し素朴な感じになっています。そこで、オプションのパラメータ key を使用すると、カスタムソート順を指定できます(別の方法として cmp は、複数回評価する必要があるため、非推奨のソリューションです。 key は要素ごとに一度だけ計算されます)。

そこで、言語固有の規則を考慮して、現在のロケールに従ってソートするために、( 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)