2012-04-19 8 views
3

リスト内の項目の型が同じでない場合、max関数はどのように機能しますか?次のコード戻り例えばPython最大関数

[1、3 '']

max([1,52,53],[1,'3']) => [1,'3'] 

答えて

6

を、異なるタイプのオブジェクトのデフォルトの比較は、オブジェクトポインタをキャストすることによって得られたそれらの種類のIDを(使用して比較することです整数へ)。ここでは、ソースへのリンク:私のビルドでhttp://hg.python.org/cpython/file/2.7/Objects/object.c#l757

、ここではタイプの順序は次のとおりです。(コンプレックスを除く)

>>> sorted([bool, int, float, long, list, tuple, dict, str, unicode]) 
[<type 'bool'>, <type 'float'>, <type 'int'>, <type 'list'>, <type 'long'>, 
<type 'dict'>, <type 'str'>, <type 'tuple'>, <type 'unicode'>] 

数字は数値に基づいて、クロスタイプの比較を可能にする方法を比較している(つまり、 floatはintと比較できます)。

なしオブジェクトは特別です。それは他のすべてよりも少なく比較します。

を使用し、それをすべて一緒に入れて確認するには、発注確認するためにをソート:

>>> sorted(zoo) 
[None, -5, -5.0, 0, 0.0, -0.0, False, True, 10, 10.0, 11.5, {}, 
{'abc': 10}, {'lmno': 20}, [], [1, 2], [1, 2, 3], [1, [2, 3]], 
'', u'', 'alpha', u'alpha', 'bingo', 'cat',(), (1, 2), 
(1, 2, 3), (1, (2, 3)), u'bingo', u'cat'] 
+0

詳細をありがとう:) –

+0

ありがとう! しかし、[1] <(1)はfalseを返します。どんな考え? –

+1

@Sagar、 '(1)'は実際にはintであることに注意してください。 Python構文によれば、コンマをタプルとして区別する必要があるので、 '[1] <(1、)'を試してみてください。それでもリストとタプルは異なる型のオブジェクトなので、おそらくそれらの型のIDを使って比較されます。 –

5

異なるタイプのオブジェクトは、タイプの文字列表現と特別なロジックを使用して比較されます。詳細についてはRaymondのanswerを参照してください。パイソン3において

このコードは例外が発生します:Python2で

Traceback (most recent call last): 
    File "prog.py", line 1, in <module> 
    max([1,52,53],[1,'3']) 
TypeError: unorderable types: str() > int() 
+0

を申し訳ありませんが、これは正しくありません。デフォルトの比較では、型の文字列表現は使用されません。 –

+0

「タイプの文字列表現」は何ですか? –

+0

'>>>なし> 1 ' ' False' –

関連する問題