当我尝试在包含整数和字符串组合的列表上调用max()
函数时,它总是返回一个字符串,在Python 2.x中
例如,
#input
li = [2, 232322, 78, 'python', 77]
max(li)
#output
'python'
这背后的逻辑似乎是什么? Python如何将字符串与整数进行比较?
答案 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']