次のような文字列のリストがあります。
_['Aden', 'abel']
_
大文字と小文字を区別せずにアイテムを並べ替えます。だから私は取得したい:
_['abel', 'Aden']
_
しかし、sorted()
またはlist.sort()
では反対になります。大文字が小文字の前に現れるためです。
ケースを無視するにはどうすればよいですか?すべてのリストアイテムを下げることを含むソリューションを見てきましたが、リストアイテムの大文字と小文字を変更したくありません。
以下はPython 2:
sorted_list = sorted(unsorted_list, key=lambda s: s.lower())
これらは両方ともlower
メソッドを持っているため、通常の文字列とUnicode文字列の両方で機能します。
Python 2では、2つのタイプの値を相互に比較できるため、通常の文字列とUnicode文字列の混在に対して機能します。Python 3は、ただし、バイト文字列とUnicode文字列を比較することはできません。したがって、Python 3では、正しいことを行い、1種類の文字列のリストのみをソートする必要があります。
>>> lst = ['Aden', u'abe1']
>>> sorted(lst)
['Aden', u'abe1']
>>> sorted(lst, key=lambda s: s.lower())
[u'abe1', 'Aden']
python 3.3)なので、ケースレスマッチング用に特別に設計され、str.casefold
の代わりに使用できる str.lower
メソッドもあります。
sorted_list = sorted(unsorted_list, key=lambda s: s.casefold())
>>> x = ['Aden', 'abel']
>>> sorted(x, key=str.lower) # Or unicode.lower if all items are unicode
['abel', 'Aden']
Python 3 str
はユニコードですが、Python 2では、str
およびunicode
:
>>> sorted(x, key=lambda s: s.lower())
['abel', 'Aden']
これを試すこともできます:
>>> x = ['Aden', 'abel']
>>> x.sort(key=lambda y: y.lower())
>>> x
['abel', 'Aden']
Python3では、使用できます
list1.sort(key=lambda x: x.lower()) #Case In-sensitive
list1.sort() #Case Sensitive
Python 3.3:
def sortCaseIns(lst):
lst2 = [[x for x in range(0, 2)] for y in range(0, len(lst))]
for i in range(0, len(lst)):
lst2[i][0] = lst[i].lower()
lst2[i][1] = lst[i]
lst2.sort()
for i in range(0, len(lst)):
lst[i] = lst2[i][1]
次に、この関数を呼び出すことができます。
sortCaseIns(yourListToSort)
これはPython 3で機能し、結果の小文字化は含まれません(!)。
values.sort(key=str.lower)