Python 2如何比较string和int?为什么列表比较的结果大于数字,而元组的结果大于列表? [英] How does Python 2 compare string and int? Why do lists compare as greater than numbers, and tuples greater than lists?

查看:88
本文介绍了Python 2如何比较string和int?为什么列表比较的结果大于数字,而元组的结果大于列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下代码段带有输出注释(如在ideone.com上看到的 ):

The following snippet is annotated with the output (as seen on ideone.com):

print "100" < "2"      # True
print "5" > "9"        # False

print "100" < 2        # False
print 100 < "2"        # True

print 5 > "9"          # False
print "5" > 9          # True

print [] > float('inf') # True
print () > []          # True

有人可以解释为什么输出是这样吗?

Can someone explain why the output is as such?


  • 此行为是否由语言强制执行规范,还是由实施者决定?

  • 主要的Python实现之间是否存在差异?

  • Python版本之间是否存在差异?语言?

推荐答案

来自 Python 2手册


CPython实现详细信息:不同类型的对象(数字除外)按其类型名称排序;不支持正确比较的相同类型的对象按其地址排序。

CPython implementation detail: Objects of different types except numbers are ordered by their type names; objects of the same types that don’t support proper comparison are ordered by their address.

订购两个字符串或两个数字类型时

When you order two strings or two numeric types the ordering is done in the expected way (lexicographic ordering for string, numeric ordering for integers).

当您订购数字和非数字类型时,数字类型将以预期的方式进行(字符串的字典顺序,整数的数字顺序)。

When you order a numeric and a non-numeric type, the numeric type comes first.

>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True

当您订购两种都不兼容的类型时,都不是数字,它们按其名称的字母顺序排序:

When you order two incompatible types where neither is numeric, they are ordered by the alphabetical order of their typenames:

>>> [1, 2] > 'foo'   # 'list' < 'str' 
False
>>> (1, 2) > 'foo'   # 'tuple' > 'str'
True

>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True

一个例外是老式类总是在新类之前出现,

One exception is old-style classes that always come before new-style classes.

>>> class Foo: pass           # old-style
>>> class Bar(object): pass   # new-style
>>> Bar() < Foo()
False








此行为是语言规范所规定的,还是由实施者决定?

Is this behavior mandated by the language spec, or is it up to implementors?

没有语言规范语言参考说:


否则,不同类型的对象总是比较不相等,并且被一致地,任意地排序。

Otherwise, objects of different types always compare unequal, and are ordered consistently but arbitrarily.

所以这是一个实现细节。

So it is an implementation detail.


任何主要的Python实现之间有区别吗?

Are there differences between any of the major Python implementations?

我无法回答这个问题,因为我只使用了官方CPython实现,但是还有其他Python实现,例如PyPy。

I can't answer this one because I have only used the official CPython implementation, but there are other implementations of Python such as PyPy.


Python语言的版本之间是否存在差异?

Are there differences between versions of the Python language?

在Python 3.x中,该行为已更改,因此尝试对整数和字符串进行排序将引发错误:

In Python 3.x the behaviour has been changed so that attempting to order an integer and a string will raise an error:

>>> '10' > 5
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    '10' > 5
TypeError: unorderable types: str() > int()

这篇关于Python 2如何比较string和int?为什么列表比较的结果大于数字,而元组的结果大于列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆