3

当列表中的项目不是同一类型时,max 函数如何工作?

例如以下代码返回 [1,'3']

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

3 回答 3

6

在 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'>]

数字(复数除外)具有允许基于数值进行交叉类型比较的比较方法(即可以将浮点数与整数进行比较)。

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']
于 2012-04-19T11:55:11.800 回答
5

在 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()
于 2012-04-19T11:32:43.443 回答
3

它执行操作员对这两个元素所做的任何事情。>

于 2012-04-19T11:31:34.510 回答