Pythonにおける真偽判定


Pythonで

[code]

    'PHP' < 'Perl' < 'Python'
    
[/code]

という文がTrueになり

[code]

    (1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b'))
    
[/code]

がFalseになる理由がよくわかりません。  
後者は1,2が同じなのでアルファベットの含まれているタプル同士で比べるというのは想像がつくのですが、  
bb<bcd、a<bなのでFalseということでしょうか？  
詳しい方、教えていただけますと幸いです。




> bb<bcd、a<bなのでFalseということでしょうか？

`bb<bcd`であるため、Falseになります。`a<b`は無関係のようです。  
順を追って確認してみます。

[code]

    >>> (1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b'))
    False
    
[/code]

は

[code]

    >>> ('bb', 'a') > ('bcd', 'b')
    False
    
[/code]

に起因するようです。試しに'a'と'b'を入れ替えてみると

[code]

    >>> ('bb', 'b') > ('bcd', 'a')
    False
    
[/code]

こちらもFalseになります。

このことから、式の評価がFalseになるのは`bb<bcd`であるためと思われます。

* * *

<https://docs.python.org/ja/3/reference/expressions.html#comparisons>  
によると

> 順序比較をサポートしているコレクションの順序は、最初の等価でない要素の順序と同じになります

<https://docs.python.org/ja/3/library/stdtypes.html>  
によると

> 同じ型のシーケンスは比較もサポートしています。特に、タプルとリストは対応する要素を比較することで辞書式順序で比較されます。

以上から`(1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b'))`を比較すると  
最初の等価でない'bb'と'bcd'を辞書順で比較した結果がFalseとなるため、式全体がFlseになります。




> bb<bcd、a<bなのでFalseということでしょうか？

`bb<bcd`であるため、Falseになります。`a<b`は無関係のようです。  
順を追って確認してみます。

[code]

    >>> (1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b'))
    False
    
[/code]

は

[code]

    >>> ('bb', 'a') > ('bcd', 'b')
    False
    
[/code]

に起因するようです。試しに'a'と'b'を入れ替えてみると

[code]

    >>> ('bb', 'b') > ('bcd', 'a')
    False
    
[/code]

こちらもFalseになります。

このことから、式の評価がFalseになるのは`bb<bcd`であるためと思われます。

* * *

<https://docs.python.org/ja/3/reference/expressions.html#comparisons>  
によると

> 順序比較をサポートしているコレクションの順序は、最初の等価でない要素の順序と同じになります

<https://docs.python.org/ja/3/library/stdtypes.html>  
によると

> 同じ型のシーケンスは比較もサポートしています。特に、タプルとリストは対応する要素を比較することで辞書式順序で比較されます。

以上から`(1, 2, ('bb', 'a')) > (1, 2, ('bcd', 'b'))`を比較すると  
最初の等価でない'bb'と'bcd'を辞書順で比較した結果がFalseとなるため、式全体がFlseになります。

