リスト内のアイテムが同じタイプでない場合、max関数はどのように機能しますか?
たとえば、次のコードは[1、'3']を返します
max([1,52,53],[1,'3']) => [1,'3']
リスト内のアイテムが同じタイプでない場合、max関数はどのように機能しますか?
たとえば、次のコードは[1、'3']を返します
max([1,52,53],[1,'3']) => [1,'3']
Python2では、さまざまなタイプのオブジェクトのデフォルトの比較は、それらのタイプの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と比較できます)。
Noneオブジェクトは特別です。それは他のすべてよりも比較しません。
すべてをまとめて表示するには、 sortedを使用して順序を確認します。
>>> 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']
Python 2では、さまざまなタイプのオブジェクトが、特別なロジックを使用してタイプの文字列表現によって比較されます。詳細については、レイモンドの回答を参照してください。
Python 3では、このコードは例外を発生させます。
Traceback (most recent call last):
File "prog.py", line 1, in <module>
max([1,52,53],[1,'3'])
TypeError: unorderable types: str() > int()