在python 3中,int(50)<'2'会导致一个TypeError,而且它应该这样做。但是,在python2.x中,int(50)<'2'返回True (其他数字格式也是如此,但int同时存在于py2和py3中)。我的问题有几个部分:
int小于str是什么意思?ord / chr吗?
'5'和u'5'在这方面有什么区别吗?发布于 2010-11-24 13:06:33
允许进行这些比较的原因是排序。Python2.x可以对包含混合类型的列表进行排序,包括字符串和整数--整数总是首先出现的。Python3.x不允许这样做,这正是您指出的原因。
Python2.x:
>>> sorted([1, '1'])
[1, '1']
>>> sorted([1, '1', 2, '2'])
[1, 2, '1', '2']Python3.x:
>>> sorted([1, '1'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()发布于 2010-11-24 12:56:00
(谁认为允许这样做是个好主意?)
我可以想象,原因可能是允许将来自不同类型的对象存储在类似树的结构中,这些结构在内部使用比较。
发布于 2010-11-24 13:11:38
就像亚伦说的。把它分解成你的观点:
所以,这在一般情况下是没有意义的,但偶尔也会有所帮助。
from random import shuffle
letters=list('abcdefgh')
ints=range(8)
both=ints+letters
shuffle(ints)
shuffle(letters)
shuffle(both)
print sorted(ints+letters)
print sorted(both)两者都先打印ints,然后打印字母。
通常,您不希望在程序中随机混合类型,而且显然Python 3阻止了Python 2在不存在的情况下试图使其具有模糊的意义。如果您真的愿意,仍然可以按lambda a,b: cmp(repr(a),repr(b)) (或其他更好的)进行排序,但语言开发人员似乎认为这是不切实际的默认行为。我希望它是不同的,这给我们带来了最小的惊喜,但是在Python 2的意义上,发现问题要困难得多。
https://stackoverflow.com/questions/4266918
复制相似问题