在Python中为什么[2]小于(1,)?

时间:2013-06-28 19:03:38

标签: python

背景

我一直试图解决为什么我的AI一直在做一些疯狂的动作,并且在使用Python 2.7.2时我将问题追溯到以下行为

>>> print [2]>[1]
True
>>> print (2,)>(1,)
True
>>> print [2]>(1,)
False                 (WHY?)

>>> print [2]<[1]
False
>>> print (2,)<(1,)
False
>>> print [2]<(1,)
True                  (WHY?)

好像列表总是小于元组。

这不是我对documentation

的期望
  

使用字典比较词典和列表进行比较   相应的元素。这意味着要比较相等的每个元素   必须比较相等,两个序列必须是相同的类型和   长度相同。

     

如果不相等,则序列的排序与第一个序列相同   不同的元素。例如,cmp([1,2,x],[1,2,y])返回   与cmp(x,y)相同。如果相应的元素不存在,那么   首先排序较短的序列(例如,[1,2]&lt; [1,2,3])。

问题

这里发生了什么?我是否可以比较元组和列表 - 或者我可能只允许将相同类型与自身进行比较?

2 个答案:

答案 0 :(得分:26)

比较时不会强制执行序列,因此会比较它们的类型名称。

>>> 'list' < 'tuple'
True

答案 1 :(得分:23)

它们的类型不同。

  

每个元素必须比较相等且两个序列必须属于同一类型并具有相同的长度

因此,比较是基于类型而不是存储在序列中的实际数据执行的。在python3.x上,此比较引发了TypeError

Python 3.2 (r32:88445, May 11 2011, 09:23:22) 
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [2] > (1,)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unorderable types: list() > tuple()