[1,3] > [1,2]
True
好的,听起来很合理,如果没有其他的话,在直观的层面上。
(3,2) <= (3,2)
True
同上。
但是是什么:
(4,3) >= (1,1,1)
True
如果我们在这里比较values()
:
{'a':1, 'b':2} < {'a':1, 'b':3}
True
那么为什么我们在这里比较keys()
:
{'a':1, 'b':2} < {'x':1, 'y':2}
True
我没有在任何地方找到有关这些现象的文件。
答案 0 :(得分:4)
(4,3)
大于(1,1,1)
的原因与"mouse"
大于"elephant"
的原因完全相同。 Lexicographical order。使用字符串你可能非常熟悉它。你希望“大象”出现在字典中的“鼠标”之前,对吗?
答案 1 :(得分:4)
Python Language Reference 5.9 Comparisons中非常清楚地记录了这一切。
特别是:
- 使用相应元素的比较,按字典顺序比较元组和列表。这意味着要比较相等,每个 元素必须比较相等,两个序列必须相同 类型和长度相同。 如果不相等,则序列的排序与它们的第一个不同元素相同。例如,
cmp([1,2,x], [1,2,y])
返回
与cmp(x,y)
相同。如果相应的元素不存在,则 首先排序较短的序列(例如,[1,2]
&lt;[1,2,3]
)。- 映射(字典)比较相等,当且仅当它们的排序
(key, value)
列表比较相等时。 [1]平等以外的结果
一致地解决,但没有另外定义。 [2]
脚注是
该实现有效地计算了这一点,无需构建列表或排序。
- 醇>
早期版本的Python使用排序(键,值)列表的字典比较,但这对于常见的非常昂贵 比较平等的情况。一个更早版本的Python 仅通过身份比较字典,但这引起了惊喜 因为人们期望能够测试字典的空虚 将其与
{}
进行比较。
比较Python 3中的词典会引发TypeError
。同样具有不相容元素的序列:
>>> {} < {1:2}
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: dict() < dict()
>>> ['a'] < [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()