2016-12-03 4 views
9

私は最近なぜPython 2ではリストと数値を比較できますか?

私のプログラムで
while len(first_list) > second_list: 
    do_stuff 

をタイプミスを発見し、私はこれで遊んと5 < ["apple"] == True5 > ["apple"] == False

はなぜPythonは比較のこれらの種類を許可しないことを発見しましたか?フードの中で評価されているものは、5["apple"]未満であることを確認するものですか?

+8

Python 2は設計上壊れているため、このような比較を試してみると例外が発生するPython 3を使用する必要があります。 – Delgan

答えて

4

私はタイプがこのケースで比較されていると思いますので、書き込みのようだ:

type(5) < type(["apple"]) 

と「int型」と「リスト」辞書的に比較されているので

(「i」の<「L」)、あなたこの出力を得ています。

あなたがしようとした場合:

"5" > ["apple"] 

あなたは "文字列"> "リスト" から、Falseを取得します。

Documentation

はCPythonの実装の詳細:番号を除いて、異なる種類のオブジェクトは型の名前によってを命じています。適切な比較をサポートしない同じ型のオブジェクトは、そのアドレスによって順序付けられます。

+0

これを示す任意のドキュメントまたはソースコードのリンクが参考になります。それなしではそれはただの仮定です –

+0

この他の質問を参照してください:[Pythonは文字列とintをどのように比較しますか?](http://stackoverflow.com/a/3270689/2291710) – Delgan

+2

正しくないです。 '{}'はFalseに評価されますが、 'dictionary'は' int'の前に来ます。 – yelsayed

-3

thisによれば、さまざまなタイプは不等な違いを比較するだけで、それを処理する方法を決定するのは実装次第です。 CPythonの実装では、型名に基づいて順序を決定することがあります。

+0

ダウン投票の具体的な理由はありますか? – yelsayed

+0

downvotesはおそらくこの答えは実際には何の答えもしていないが、実際には実装に至っていないからです。 – mb21

+0

ケアを説明しますか?公式の文書のどこにこれが定義されていますか? – yelsayed

3

パイソン2の文書からその:

オペレータ<>==>=<=、及び!=二つのオブジェクトの値を比較します。オブジェクトは同じタイプである必要はありません。両方が数字の場合は、共通タイプに変換されます。さもなければ、異なる型のオブジェクトは常に不等号を比較し、一貫していますが任意に順序付けられます。 __cmp__メソッドを定義するか、または__gt__のような豊富な比較メソッドを定義することにより、組み込みタイプ以外のオブジェクトの比較動作を制御できます。

関連する問題