Pythonが次のような出力を提供する理由:
>>> 'apple' > 'T'
True
>>> 'apple' > 't'
False
どちらの場合も正しいはずです。
編集:
ASCIIテーブルのアイデアを思いつきました。ありがとう!
さて、これはどうですか.11.1は「11.1」として扱われていますか?
>>> 'apple' > 11.1
True
Pythonが次のような出力を提供する理由:
>>> 'apple' > 'T'
True
>>> 'apple' > 't'
False
どちらの場合も正しいはずです。
編集:
ASCIIテーブルのアイデアを思いつきました。ありがとう!
さて、これはどうですか.11.1は「11.1」として扱われていますか?
>>> 'apple' > 11.1
True
ASCII 文字セットでは のa
後に来るため、 .T
t
これらの文字の 10 進 ASCII エンコード:
T
は84です。a
は97です。t
は116です。ここでの重要な洞察は、文字列の比較がアルファベット順や自然な順序に基づいて比較されるのではなく、ASCII の文字の順序に基づいて比較されるということです。この順序はASCII テーブルで確認できます。
Python は各文字列の最初の文字を比較し、同じ場合は次の文字に進みます。文字が異なるか、1 つの文字列がなくなるまでこれを行います (この場合、文字列が長い方が大きいと見なされます)。
cdhowie が指摘したように、10 進数の ASCII エンコーディングT
は84、97、116です。したがってa
、次のようになります。t
>>> 'T' < 'a' < 't'
True
2 番目のポイントを示すには、次のようにします。
>>> "apple" > "a"
True
より自然な比較を行うには、以下を参照してください: Python には文字列自然ソート用の組み込み関数がありますか?
編集で追加した質問に答えるには:
簡単な答えは「はい」です。11.1
への変換'11.1'
が実行されています。
より複雑な答えは、Pythonで比較がどのように正確に実装されているかを扱います。Python オブジェクトは、比較マジック メソッドを実装している場合に比較できます。そのリンクには、Pythonの内部についてかなりの量の読書があります。
@glibdup が指摘したように、上記は正しくありません。Python では、タイプの名前に基づいて異なるタイプが比較されます。したがって、'str' > 'float'
どの文字列もどのフロートよりも大きくなります。あるいは、任意のタプルが任意の文字列よりも大きくなります。