この記事ではpython3.7, ruby2.6.6を使用しています。実行環境はそれぞれPyCharm2020.3とAWSです。
(注 2021年3月15日追記)
文字コードはPythonの標準の文字コードであるUTF-8とします。
ちなみに自分はこの記事を執筆して始めて文字コードを意識しました。
1. はじめに
プログラミングでは半角と全角、大文字と小文字は別の文字として認識されますよね。そしてこのことは既に知っていると思います。では質問です。appleとAppleは辞書順ではどちらが先にくるでしょうか?
2. 答え
答えはAppleが先です。Pythonを使って確かめてみましょう。
s1 = 'apple'
s2 = 'Apple'
if s1 > s2:
print(f'{s1}は{s2}より前')
# -> appleはAppleより前
3. apple, Apple, APPLEではどうなるか?
appleとAppleは辞書順ではどちらが先にくるかという疑問が解消したところで次の疑問が生じました。「apple, Apple, APPLEではどうなるのか?」先ほどと同じようにif文を用いて調べてみましょう。
s1 = 'apple'
s2 = 'Apple'
s3 = 'APPLE'
if s1 < s2 <s3:
print(f'{s1}, {s2}, {s3}の順')
elif s1 < s3 < s2:
print(f'{s1}, {s3}, {s2}の順')
elif s2 < s1 < s3:
print(f'{s2}, {s1}, {s3}の順')
elif s2 < s3 < s1:
print(f'{s2}, {s3}, {s1}の順')
elif s3 < s1 < s2:
print(f'{s3}, {s1}, {s2}の順')
elif s3 < s2 < s1:
print(f'{s3}, {s2}, {s1}の順')
# ->APPLE, Apple, appleの順
答えはAPPLE, Apple, appleの順になることが分かりました。
4. 考察
APPLE, Apple, appleの順になることから分かることは次のとおりです。すなわち**「同じ文字ならば辞書順では大文字が小文字に優先する」**ということです。
ただしコメントでご指摘があったように文字コードによっては小文字が先に来ることもあるそうです。だったら「この記事は一体何だったんだ?」と思われるかもしれません(tなみに書いた本人は一番思っています)。まあUTF-8とASCIIが大文字優先だからギリ耐えたことにしようしたい(耐えてないけど...)。
5. コードを読みやすくする
**「同じ文字ならば辞書順では大文字が小文字に優先する」**という結論は分かったのですが、apple, Apple, APPLEの順番を比較したコードは条件分岐が6通りもあって読みにくいですよね。読みにくさを解消するためにリストを用います。まずリストを作成して次にsort()メソッドを使用して降順に並べ替えます。
apple_list = ['apple', 'Apple', 'APPLE']
apple_list.sort()
print(apple_list)
6. まとめ
結論:「同じ文字ならば辞書順では大文字が小文字に優先する」
(この後は余談です。興味がある方は読んでいただけるとありがたいです。)
参考文献
『実践式はじめてのPython問題集まとめVer2:Python入門』
余談
今回の疑問は『実践式はじめてのPython問題集まとめVer2:Python入門』で問題演習をしていたときに生じました。自分はこの結果が受け入れられずrubyでも試しました。一応そのときのコードを記載しておきます。あと自分がrubyのコードをQiitaに投稿したのはこれが始めてです。
s1 = 'apple'
s2 = 'Apple'
if s1 < s2
puts("#{s1}は#{s2}より前です")
elsif s1 == s2
puts("#{s1}は#{s2}は同じです")
else
puts("#{s2}は#{s1}より前です")
end
# -> Appleはappleより前です