Python列表大于某个数

20
我发现列表比数字大。
>>> [1,2,3] > 1000
True

为什么这样可以工作?我无法使用 int([1,2,3]) 将列表转换为整数。list(1000) 无法将整数转换为列表。那么Python是如何比较这两个操作的呢?


2
@Mike,不行。你得到了一个TypeError。 - John La Rooy
2
找到了:在PEP 3100中提到:“除了==!=之外的不同类型之间的比较将引发异常,除非该类型明确支持。” - Mike DeSimone
当我发现一个 bug 时,但它已经被修复了,这感觉真好。 - Benbob
2个回答

27
在这种“类型不匹配”的情况下,类型按字典序列出:在字母顺序中,“list”排在“int”之后,因此它更大。
CPython的实现细节:除了数字以外的不同类型对象按其类型名称排序;不支持适当比较的相同类型的对象按其地址排序。(source)
没有关于排序的语言规范(除了一致性)。事实上,恰好是CPython是最常见的实现之一,其中有一个按类型名称字典序排列的语言细节。

8
我马上要说这个。在Python 3中它们是不可比较的。此外,在Python 2.x中,None将始终比任何其他值小。 - Cassandra S.
1
“类型按字典顺序列出”,在哪里? - eyquem
@machine yearning和eyquem:稍微更新了一下答案。 - Uku Loskit
@eyquem的意思是“对象通过类型名称的字典比较进行比较”。 - Karl Knechtel

10
根据Python参考手册,大多数其他内置类型的对象在不是同一对象的情况下比较不相等;选择一个对象被认为比另一个对象小或大是任意的,但在程序的一个执行中保持一致。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接