簡體   English   中英

為什么元組比python中的列表大?

[英]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的其他實現。

參考文件

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

所以它似乎是依賴於實現的。 例如在CPython中

除數字外的不同類型的對象按其類型名稱排序; 不支持正確比較的相同類型的對象按其地址排序。

這可能是依賴於實現的,我認為沒有直接原因。 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM