在包含字符串和整数的列表上使用max()

时间:2016-01-14 17:19:30

标签: python list python-2.7 max

当我尝试在包含整数和字符串组合的列表上调用max()函数时,它总是返回一个字符串,在Python 2.x中

例如,

#input
li = [2, 232322, 78, 'python', 77]
max(li)

#output
'python'

这背后的逻辑似乎是什么? Python如何将字符串与整数进行比较?

3 个答案:

答案 0 :(得分:7)

在python2中,字符串和数字以任意但一致的顺序进行比较。

请参阅Comparisons

  

不同类型的对象,除了不同的数字类型和不同的字符串类型,从不比较相等;这些对象是一致但任意排序的(因此对异构数组进行排序会产生一致的结果

在python3中,这会引发类型错误。

class Foo 
  def bar
    get_name #should work and print name, i.e. it uses the get_name method of Foo
    Object.instance_method(:get_name).bind(self).('abc') #should work and print abc, i.e. it uses the top-level method
  end
end

Foo.new.bar
# name
# abc

答案 1 :(得分:1)

字符串和数字之间的比较是不确定的。这取决于python的版本。字符串总是大于任何数字或更低。

manual状态,在CPython中,不同对象在其类型名称后进行比较,如果没有定义其他比较。

答案 2 :(得分:0)

在Python 2.x中 max()和min()函数首先在内部对列表进行排序,得到类似于list.sort()输出的列表,然后输出列表的最后一个(最大)和第一个(最小)项 -

>>> li = [2, 232322, 78, 'python', 77]
>>> max(li)
'python'
>>> min(li)
2

如下所示,如果对列表进行排序,列表中的第一个和最后一个项目是由最小和最大函数生成的结果

>>> li = [2, 232322, 78, 'python', 77]
>>> li.sort()
>>> print li
[2, 77, 78, 232322, 'python']