不同型別的比較
Python 2.x >= 2.3
可以比較不同型別的物件。結果是任意的,但是一致的。它們的排序使得 None
比其他任何東西都小,數字型別小於非數字型別,其他所有型別按字典順序排序。因此,int
小於 str
而 tuple
大於 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
開頭的字串表示,並且它能夠對那些(以及所有以下字元)進行排序。