プログラミングコンテストでは、アルファベットの大文字と小文字を区別せずに(例えば ‘A’ と ‘a’ を同じものとして扱う)文字列のリストをソートさせるような出題があります。これは、通常のソートに一手間かける必要がある、少し意地悪に感じる問題です。
ここでは、casefold( ) を用いて、それを簡単に実現する方法を紹介します。
python3 で大文字・小文字の区別をすることなく文字列のリストをソート
早速ですが、以下に mylist という文字列のリストを、大文字・小文字の区別をすることなくソートする例を紹介します。
mylist = ['AC', 'Aa', 'AB', 'Bac', 'BAd' ]
sorted_list = sorted(mylist, key=lambda s: s.casefold())
print(sorted_list)
# --> ['Aa', 'AB', 'AC', 'Bac', 'BAd']
上記コードのポイントは、str.casefold() という関数を使用している部分です。
この関数では、すべての文字を小文字に変換しています。そのすべてが小文字化された文字列をkeyとして、ソートが実行されている訳です。
念のため、 str.casefold() を使用しない通常のソートを行った結果を以下に示します。
mylist = ['AC', 'Aa', 'AB', 'Bac', 'BAd' ]
sorted_list = sorted(mylist)
print(sorted_list)
# --> ['AB', 'AC', 'Aa', 'BAd', 'Bac']
通常のソートでは、大文字が優先されていることが分かります。