Python min()具有不同类型的参数

时间:2013-03-02 00:01:58

标签: python

我最近惊讶地发现你可以在Python中使用不同类型的参数的min()而不会得到ValueError。

min(3, "blah") ==> 3
min(300, 'zzz') ==> 300

文档对此不清楚 - 它只是说min()采用“最小的参数”。如何确定哪个元素最小?

3 个答案:

答案 0 :(得分:1)

它通过使用通常规则比较它来确定这一点。如果对象具有不同类型且无法进行合理比较(因为它们都没有实现所需的特殊方法,或者实现不能与其他对象的类型一起使用),那么它们按类型给出一致的顺序;例如,所有整数都小于所有字符串。试一试:1 < "1"

(顺便说一句,布尔值是作为整数的子类实现的,可以与数字进行比较,因此它们将False排序为0,将True排序为1。)

它是以这种方式实现的,因此如果您对包含各种类型的列表进行排序,则类似的类型将一起排序。然而,在Python 3转发中,这已被更改,您无法再隐式地比较不同类型。

答案 1 :(得分:0)

在Python 2中,存在任意但可预测的值与不同类型的比较。我认为它类似于类型名称的字典比较(整数&lt;浮点数&lt; strs&lt;元组)。

答案 2 :(得分:0)

根据Python的排序定义,这是正确的:

>>> 3 < "blah"
True
>>> 300 < 'zzz'
True

rule是:

  

如果两者都是数字,则将它们转换为通用类型。否则,不同类型的对象总是比较不相等,并且一致但是任意地排序。