cwa*_*ole 6 python string int comparison python-2.x
在python 3中,int(50)<'2'
导致a TypeError
,以及它应该.但是,在python 2.x中,int(50)<'2'
返回True
(对于其他数字格式也是如此,但int
在py2和py3中都存在).那么,我的问题有几个部分:
int
小于一个是什么意思str
?
ord
/ chr
?'5'
和u'5'
这方面有区别吗?它的工作原理如下1.
>>> float() == long() == int() < dict() < list() < str() < tuple()
True
Run Code Online (Sandbox Code Playgroud)
数字比较小于容器.数字类型将转换为通用类型,并根据其数值进行比较.容器按其名称的字母值进行比较.2
来自文档:
CPython实现细节:除了数字之外的不同类型的对象按其类型名称排序; 不支持正确比较的相同类型的对象按其地址排序.
不同内置类型的对象按字母顺序按类型名称进行比较.int
,以"i" str
开头,以一个s
以任何int
小于任何值开头str
.
回应关于的评论 long < int
>>> int < long
True
Run Code Online (Sandbox Code Playgroud)
您可能意味着这些类型的值,在这种情况下,数字比较适用.
1这完全在Python 2.6.5上
2感谢kRON为我解决这个问题.我从来没有想过将数字与dict
之前的数字进行比较,数字的比较就是那些很容易被忽视的事情之一.
允许这些比较的原因是排序.Python 2.x可以对包含混合类型的列表进行排序,包括字符串和整数 - 整数首先出现.由于您指出的确切原因,Python 3.x不允许这样做.
Python 2.x:
>>> sorted([1, '1'])
[1, '1']
>>> sorted([1, '1', 2, '2'])
[1, 2, '1', '2']
Run Code Online (Sandbox Code Playgroud)
Python 3.x:
>>> sorted([1, '1'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: str() < int()
Run Code Online (Sandbox Code Playgroud)