不同类型的比较

Python 2.x >= 2.3

可以比较不同类型的对象。结果是任意的,但是一致的。它们的排序使得 None 比其他任何东西都小,数字类型小于非数字类型,其他所有类型按字典顺序排序。因此,int 小于 strtuple 大于 list

[1, 2] > 'foo'
# Out: False
(1, 2) > 'foo'
# Out: True
[1, 2] > (1, 2)
# Out: False
100 < [1, 'x'] < 'xyz' < (1, 'x')
# Out: True

这最初是这样做的,因此可以对混合类型列表进行排序,并按类型将对象组合在一起:

l = [7, 'x', (1, 2), [5, 6], 5, 8.0, 'y', 1.2, [7, 8], 'z']
sorted(l)
# Out: [1.2, 5, 7, 8.0, [5, 6], [7, 8], 'x', 'y', 'z', (1, 2)]

Python 3.x >= 3.0

比较不同(非数字)类型时会引发异常:

1 < 1.5
# Out: True

[1, 2] > 'foo'
# TypeError: unorderable types: list() > str()
(1, 2) > 'foo'
# TypeError: unorderable types: tuple() > str()
[1, 2] > (1, 2)
# TypeError: unorderable types: list() > tuple()

要按类型对 Python 3 中的混合列表进行排序并实现版本之间的兼容性,你必须提供已排序函数的键:

>>> list = [1, 'hello', [3, 4], {'python': 2}, 'stackoverflow', 8, {'python': 3}, [5, 6]]
>>> sorted(list, key=str)
# Out: [1, 8, [3, 4], [5, 6], 'hello', 'stackoverflow', {'python': 2}, {'python': 3}]

使用 str 作为 key 函数会暂时将每个项目转换为字符串,仅用于比较。然后它会看到以 ['{0-9 开头的字符串表示,并且它能够对那些(以及所有以下字符)进行排序。