質問

Python でアルファベット順にソートされたリストを作成する最良の方法は何ですか?

役に立ちましたか?

解決

基本的な答え:

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)

他のヒント

また、注目に値するのは、 sorted() 関数:

for x in sorted(list):
    print x

これにより、元のリストを変更せずに、新しい並べ替えられたバージョンのリストが返されます。

list.sort()

本当にとてもシンプルです:)

文字列を並べ替える適切な方法は次のとおりです。

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 のみのコンテキストでは正常に動作します。

しかし、これは言語固有の並べ替えルールをどのように処理するのでしょうか?ロケールは考慮されますか?

いいえ、 list.sort() は一般的な並べ替え関数です。Unicode ルールに従って並べ替える場合は、カスタム ソート キー関数を定義する必要があります。を使用してみることができます ピュカ モジュールですが、どの程度完成しているかわかりません。

Python3ではsorted()関数を使用してください。

items = ["love", "like", "play", "cool", "my"]
sorted(items2)

仮定する s = "ZWzaAd"

文字列より上でソートするには、単純な解決策は 1 より下になります。

print ''.join(sorted(s))

または多分:

names = ['Jasmine', 'Alberto', 'Ross', 'dig-dog']
print ("The solution for this is about this names being sorted:",sorted(names, key=lambda name:name.lower()))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top