基于min函数的比较

时间:2014-03-24 05:38:10

标签: python python-2.7

min函数究竟对python中的列表有效吗?

例如,

 num = [1,2,3,4,[1,2,3]]
 num2 = [1,2,3,4,5]

 min(num,num2) 

结果为num2。比较值是基于还是基于长度?

2 个答案:

答案 0 :(得分:6)

首先 - 将两个列表与min进行比较时,会按顺序比较元素。因此,它将1122 ...和5[1,2,3]进行比较。

其次,在python 2中,允许比较不等类型,并给出“任意但一致”的排序。请docs

  

运算符<,>,==,> =,< =和!=比较两个值   对象。对象不必具有相同的类型。如果两者都是数字,   它们被转换为普通类型。否则,对象不同   类型总是比较不相等,并且一致地排序但是   任意。

     

...

     

(这种不寻常的比较定义用于简化   操作的定义,如排序和运算符中的in和not。   将来,不同类型对象的比较规则是   可能会改变。)

至少在cPython中,这种比较等同于比较代表各自类型的字符串。因此:

5 < [1,2,3]
Out[8]: True

因为'int' < 'list'。我相信这是一个实现细节,应该强调这种顺序的任意性。

谢天谢地,在python 3中,这个愚蠢被TypeError替换。

答案 1 :(得分:1)

在python中比较不兼容的数据类型时,它会比较数据类型的“第一个字母”。对于Ex:

>>> {}<[]
True
'dict'<'list'

这里'd'&lt;'l',因此返回True。在比较的所有地方都实现相同的逻辑,例如&lt;,&gt;,=,min(),max()......

我希望上面的例子现在清楚了。