亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python 2如何比較字符串和int?為什么列表比較大于數字,而元組大于列表?

Python 2如何比較字符串和int?為什么列表比較大于數字,而元組大于列表?

湖上湖 2019-05-27 16:55:36
Python 2如何比較字符串和int?為什么列表比較大于數字,而元組大于列表?以下代碼段使用輸出進行注釋(如ideone.com上所示):print "100" < "2"      # Trueprint "5" > "9"        # Falseprint "100" < 2        # Falseprint 100 < "2"        # Trueprint 5 > "9"          # Falseprint "5" > 9          # Trueprint [] > float('inf') # Trueprint () > []          # True有人可以解釋為什么輸出是這樣的?實施細節這種行為是由語言規范強制執行的,還是由實現者決定的?任何主要的Python實現之間是否存在差異?Python語言版本之間是否存在差異?
查看完整描述

2 回答

?
holdtom

TA貢獻1805條經驗 獲得超10個贊

python 2手冊

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

當您訂購兩個字符串或兩個數字類型時,排序以預期的方式完成(字符串的字典順序,整數的數字排序)。

當您訂購數字和非數字類型時,數字類型首先出現。

>>> 5 < 'foo'

True

>>> 5 < (1, 2)

True

>>> 5 < {}

True

>>> 5 < [1, 2]

True

當您訂購兩個不兼容的類型(兩者都不是數字)時,它們按其類型名的字母順序排序:


>>> [1, 2] > 'foo'   # 'list' < 'str' 

False

>>> (1, 2) > 'foo'   # 'tuple' > 'str'

True


>>> class Foo(object): pass

>>> class Bar(object): pass

>>> Bar() < Foo()

True

一個例外是舊式類,它總是出現在新式類之前。


>>> class Foo: pass           # old-style

>>> class Bar(object): pass   # new-style

>>> Bar() < Foo()

False

這種行為是由語言規范強制執行的,還是由實現者決定的?

沒有語言規范。該語言參考說:

否則,不同類型的對象總是比較不相等,并且一致但是任意地排序。

所以它是一個實現細節。

任何主要的Python實現之間是否存在差異?

我無法回答這個,因為我只使用了官方的CPython實現,但還有其他Python實現,如PyPy。

Python語言版本之間是否存在差異?

在Python 3.x中,行為已更改,因此嘗試排序整數和字符串將引發錯誤:

>>> '10' > 5

Traceback (most recent call last):

  File "<pyshell#0>", line 1, in <module>

    '10' > 5

TypeError: unorderable types: str() > int()


查看完整回答
反對 回復 2019-05-27
  • 2 回答
  • 0 關注
  • 2072 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號