[英]Why is tuple larger than a list in python?
考慮Python中的以下問題:
>>> () < []
這句話產生了False
和
>>> () > []
收益真實。 據我所知, []
等於False
,但什么是空元組?
如果我們輸入
>>> 1233 < (1,2)
我們得到一個True
,作為返回值。 但為什么 ?
謝謝
來自文檔 :
運算符<,>,==,> =,<=和!=比較兩個對象的值。 對象不必具有相同的類型。 如果兩者都是數字,則將它們轉換為通用類型。 否則,不同類型的對象總是比較不相等,並且一致但是任意地排序。 您可以通過定義
__cmp__
方法或豐富的比較方法(如__gt__
來控制非內置類型對象的比較行為,如3.4節所述。(這種不尋常的比較定義用於簡化操作的定義,如排序和運算符中的in和not。 將來,不同類型的對象的比較規則可能會發生變化。)
這是真的。 在python 3中,這是一個TypeError
。
() > []
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-d2326cfc55a3> in <module>()
----> 1 () > []
TypeError: unorderable types: tuple() > list()
回到python 2:文檔強調這是一個任意但一致的排序。
在cPython 2中,不等類型按類型名稱進行比較。 所以tuple
是“大於” list
,按字典順序list
。
這是CPython(2.x)實現細節,如內置類型中所述 - 比較 :
CPython實現細節 :除了數字之外的不同類型的對象按其類型名稱排序; 不支持正確比較的相同類型的對象按其地址排序。
因此,任何元組都比任何列表都要大,因為'tuple' > 'list'
。
這不再適用於CPython 3,並且從未用於Python 2.x的其他實現。
這可能是依賴於實現的,我認為沒有直接原因。 Python 3.X禁止兩種不同類型的比較。
這是因為python 2.x使用方法__cmp__()
。
Python 3.x不會使用此方法。
您正在使用低於3.0的python版本。
使用python版本3.x,會有一個例外:
TypeError:unorderalbe類型......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.