Python将int,float等与列表进行比较

时间:2013-09-04 19:00:45

标签: python

所以这一直困扰着我,我无法在网上找到任何关于它的信息。有人可以在python中解释这个行为吗?为什么它返回True而不是抛出异常?感谢

In [1]: 1 < [1, 2, 3]
Out[1]: True

3 个答案:

答案 0 :(得分:9)

确实抛出异常 - 无论如何:

$ python3
Python 3.3.0 (default, Apr 17 2013, 13:40:43) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 1 < [1,2,3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: int() < list()

Python曾经让比较在过去像这样通过,因为有时候能够在异构容器中自动排序所有内容,但这导致了更多的错误而不是方便,所以它在Python 3中得到修复

答案 1 :(得分:4)

尝试使排序更容易。 Python尝试以一致但任意的顺序使没有有意义的比较操作的对象进行比较。在Python 3中,他们改变了它;这将是Python 3中的TypeError。

答案 2 :(得分:4)

如果我没记错的话,你在py2中看到的行为实际上是比较类型。

>>> 1 < [1,2,3]
True
>>> 1 > [1,2,3]
False
>>> int < list
True
>>> int > list
False

当我进一步深入研究时,我认为它比较了这些类型的名称,尽管可能有些间接,可能是通过其中一种,但我无法分辨:

>>> repr(int)
"<type 'int'>"
>>> int.__name__
'int'
>>> repr(list)
"<type 'list'>"
>>> list.__name__
'list'

>>> 'int' < 'list'
True
>>> "<type 'int'>" < "<type 'list'>"
True