回答:
基本的な答え:
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)
mylist.sort(key=str.lower)
より速いです。
[1, 2, 3].sort()
。sort()
所定の位置にリストをソートする(すなわち、直接リストを変更し)、それはソートされたリストを返しません。また、実際にあなたのprint文を印刷して、何も返しませんNone
。あなたが変数にあなたのリストを保存した場合、たとえばx
、呼ばれるx.sort()
、そしてprint(x)
、あなたはソートされたリストを見るでしょう。
文字列をソートする適切な方法は次のとおりです。
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'), cmp=locale.strcoll) == [u'aa', u'Ab', u'ad']
# Without using locale.strcoll you get:
assert sorted((u'Ab', u'ad', u'aa')) == [u'Ab', u'aa', u'ad']
前の例はmylist.sort(key=lambda x: x.lower())
、ASCIIのみのコンテキストで正常に動作します。
Python3でsorted()関数を使用してください
items = ["love", "like", "play", "cool", "my"]
sorted(items2)
古い質問ですが、設定なしでロケール対応のソート を実行したい場合は、この回答で提案さlocale.LC_ALL
れているPyICUライブラリを使用して実行できます。
import icu # PyICU
def sorted_strings(strings, locale=None):
if locale is None:
return sorted(strings)
collator = icu.Collator.createInstance(icu.Locale(locale))
return sorted(strings, key=collator.getSortKey)
次に、例:
new_list = sorted_strings(list_of_strings, "de_DE.utf8")
これは、ロケールをインストールしたり、他のシステム設定を変更したりすることなく機能しました。
(これは上記のコメントですでに提案されていましたが、最初は自分で見逃していたため、もっと目立つようにしたかったのです。)
それは簡単です:https : //trinket.io/library/trinkets/5db81676e4
scores = '54 - Alice,35 - Bob,27 - Carol,27 - Chuck,05 - Craig,30 - Dan,27 - Erin,77 - Eve,14 - Fay,20 - Frank,48 - Grace,61 - Heidi,03 - Judy,28 - Mallory,05 - Olivia,44 - Oscar,34 - Peggy,30 - Sybil,82 - Trent,75 - Trudy,92 - Victor,37 - Walter'
ソートされた(スコア)のxのスコア= score.split( '、'):print(x)
locale
現在のロケールに従って自然にソートするには、文字列照合メソッドを使用します。