質問: Pythonで ``` 'PHP' < 'Perl' < 'Python' ``` という文がTrueになり ``` (1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b')) ``` がFalseになる理由がよくわかりません。 後者は1,2が同じなのでアルファベットの含まれているタプル同士で比べるというのは想像がつくのですが、 bb
回答: > > bb > > `bb>> (1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b')) False ``` は ``` >>> ('bb', 'a') > ('bcd', 'b') False ``` に起因するようです。試しに'a'と'b'を入れ替えてみると ``` >>> ('bb', 'b') > ('bcd', 'a') False ``` こちらもFalseになります。 このことから、式の評価がFalseになるのは`bb によると > > 順序比較をサポートしているコレクションの順序は、最初の等価でない要素の順序と同じになります > > > によると > > 同じ型のシーケンスは比較もサポートしています。特に、タプルとリストは対応する要素を比較することで辞書式順序で比較されます。 > > > 以上から`(1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b'))`を比較すると 最初の等価でない'bb'と'bcd'を辞書順で比較した結果がFalseとなるため、式全体がFlseになります。