2011-08-23 62 views
18

我發現列表大於號碼。Python列表大於號碼

>>> [1,2,3] > 1000 
True 

有沒有一些原因,爲什麼這個工程?我無法通過int([1,2,3])將列表轉換爲int。 int不能轉換爲list(1000)的列表。那麼python如何比較兩者呢?

+3

這是否適用於Python 3? –

+2

@Mike,no。你會得到一個TypeError –

+2

**發現它:**埋在[PEP 3100](http://www.python.org/dev/peps/pep-3100/):「除了== ==和'以外的比較! ='在不同類型之間會引發一個異常,除非類型明確支持「 –

回答

26

在這種「不匹配」類型的情況下,類型按字典順序按名稱列出:「列表」以字母順序排在「int」後面,因此它更大。

CPython實現細節:除 之外的不同類型的對象按其類型名排序;不支持正確比較的相同類型的對象 按其地址排序。 (source

沒有爲排序(除了事實是一致的),沒有語言規範。恰巧CPython是最常見的實現,其中有這種語言細節按類型名按字典順序排列。

+8

正要說這個。在Python 3中,它們不具有可比性。另外,在Python 2.x中,None總是比其他任何東西都少。 – RxS

+1

@Uku Loskit _「類型按字典順序列出」_哪裏? – eyquem

+0

@machine渴望&eyquem:更新了答案。 –

10

按照Python Reference Manual

大多數內置類型比較不平等,除非它們是同一個對象的其他對象;一個對象被認爲是小於還是大於另一個的選擇是任意的,但是在程序的一次執行中是一致的。