1. ホーム
  2. python

[解決済み] 大文字と小文字を区別しないリストソート?

2022-04-22 04:56:31

質問

このような文字列のリストがあります。

['Aden', 'abel']

大文字・小文字を区別せずに並べ替えたい。 だから、私は取得したい。

['abel', 'Aden']

しかし、私はその逆を sorted() または list.sort() 大文字が小文字の前に表示されるからです。

大文字・小文字を無視するにはどうしたらよいですか?すべてのリスト項目を小文字にする解決策を見たことがありますが、リスト項目の大文字と小文字を変えたくありません。

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

Python 3.3+には str.casefold メソッドは、特にケースレスマッチングのために設計されています。

sorted_list = sorted(unsorted_list, key=str.casefold)

Python 2 では lower() :

sorted_list = sorted(unsorted_list, key=lambda s: s.lower())

これは、通常の文字列とユニコード文字列の両方に対して機能します。 lower メソッドを使用します。

Python 2では、通常の文字列とユニコード文字列が混在していても、2つの型の値を互いに比較することができるので、うまくいきます。Python 3では、バイト文字列とユニコード文字列を比較することはできないので、Python 3ではまともなことをして、1つのタイプの文字列のリストだけをソートすべきです。

>>> lst = ['Aden', u'abe1']
>>> sorted(lst)
['Aden', u'abe1']
>>> sorted(lst, key=lambda s: s.lower())
[u'abe1', 'Aden']