Python 2如何比较字符串和int?为什么列表比数字大,元组比列表大?
以下代码段使用输出()进行注释:Python 2如何比较字符串和int?为什么列表比数字大,元组比列表大?,python,types,comparison,python-2.x,Python,Types,Comparison,Python 2.x,以下代码段使用输出()进行注释: 打印“100”打印“9”#错误 打印“100”9#正确 打印[]>float('inf')#真 打印()>[]正确 有人能解释为什么输出是这样的吗 实施细节 这种行为是由语言规范规定的,还是由实现者决定的 主要的Python实现之间是否存在差异 Python语言的不同版本之间是否存在差异 字符串按词典进行比较,不同类型的字符串按其类型的名称进行比较(“int”“string”)。3.x通过使字符串不可比较来修正第二点。字符串按字典顺序进行比较,不同类型的字
打印“100”<“2”#正确
打印“5”>打印“9”#错误
打印“100”<2#假
打印100<“2”#正确
打印5>“9”#错误
打印“5”>9#正确
打印[]>float('inf')#真
打印()>[]正确
有人能解释为什么输出是这样的吗
实施细节
- 这种行为是由语言规范规定的,还是由实现者决定的
- 主要的Python实现之间是否存在差异
- Python语言的不同版本之间是否存在差异
“int”
“string”
)。3.x通过使字符串不可比较来修正第二点。字符串按字典顺序进行比较,不同类型的字符串按其类型的名称进行比较(“int”
“string”)。3.x通过使它们不可比较来修正第二点。来自:
CPython实现细节:除数字外,不同类型的对象按其类型名排序;不支持正确比较的相同类型的对象按其地址排序
当您对两个字符串或两个数字类型进行排序时,排序是按预期方式进行的(字符串的字典排序,整数的数字排序)
订购数字和非数字类型时,数字类型排在第一位
>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True
>>5<'foo'
真的
>>> 5 < (1, 2)
真的
>>> 5 < {}
真的
>>> 5 < [1, 2]
真的
当您对两种不兼容的类型进行排序时,如果两种类型都不是数字类型,则会按照其类型名的字母顺序进行排序:
>>> [1, 2] > 'foo' # 'list' < 'str'
False
>>> (1, 2) > 'foo' # 'tuple' > 'str'
True
>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True
>[1,2]>'foo'#'list'<'str'
假的
>>>(1,2)>“foo”#“tuple”>“str”
真的
>>>类Foo(对象):pass
>>>类栏(对象):传递
>>>Bar()
一个例外是旧样式的类总是在新样式的类之前出现
>>> class Foo: pass # old-style
>>> class Bar(object): pass # new-style
>>> Bar() < Foo()
False
>class Foo:pass#老式
>>>类栏(对象):通过#新样式
>>>Bar()
这种行为是由语言规范规定的,还是由实现者决定的 有。报告说: 否则,不同类型的对象总是比较不相等,并且顺序一致但任意 因此,这是一个实现细节 主要的Python实现之间是否存在差异 我不能回答这个问题,因为我只使用了官方的CPython实现,但是还有其他Python实现,比如PyPy Python语言的不同版本之间是否存在差异 在Python 3.x中,行为已更改,因此尝试对整数和字符串进行排序将引发错误:
>>> '10' > 5
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'10' > 5
TypeError: unorderable types: str() > int()
'10'>5
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
'10' > 5
TypeError:无序类型:str()>int()
来自:
CPython实现细节:除数字外,不同类型的对象按其类型名排序;不支持正确比较的相同类型的对象按其地址排序
当您对两个字符串或两个数字类型进行排序时,排序是按预期方式进行的(字符串的字典排序,整数的数字排序)
订购数字和非数字类型时,数字类型排在第一位
>>> 5 < 'foo'
True
>>> 5 < (1, 2)
True
>>> 5 < {}
True
>>> 5 < [1, 2]
True
>>5<'foo'
真的
>>> 5 < (1, 2)
真的
>>> 5 < {}
真的
>>> 5 < [1, 2]
真的
当您对两种不兼容的类型进行排序时,如果两种类型都不是数字类型,则会按照其类型名的字母顺序进行排序:
>>> [1, 2] > 'foo' # 'list' < 'str'
False
>>> (1, 2) > 'foo' # 'tuple' > 'str'
True
>>> class Foo(object): pass
>>> class Bar(object): pass
>>> Bar() < Foo()
True
>[1,2]>'foo'#'list'<'str'
假的
>>>(1,2)>“foo”#“tuple”>“str”
真的
>>>类Foo(对象):pass
>>>类栏(对象):传递
>>>Bar()
一个例外是旧样式的类总是在新样式的类之前出现
>>> class Foo: pass # old-style
>>> class Bar(object): pass # new-style
>>> Bar() < Foo()
False
>class Foo:pass#老式
>>>类栏(对象):通过#新样式
>>>Bar()
这种行为是由语言规范规定的,还是由实现者决定的 有。报告说: 否则,不同类型的对象总是比较不相等,并且顺序一致但任意 因此,这是一个实现细节 主要的Python实现之间是否存在差异 我不能回答这个问题,因为我只使用了官方的CPython实现,但是还有其他Python实现,比如PyPy Python语言的不同版本之间是否存在差异 在Python 3.x中,行为已更改,因此尝试对整数和字符串进行排序将引发错误:
>>> '10' > 5
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
'10' > 5
TypeError: unorderable types: str() > int()
'10'>5
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
'10' > 5
TypeError:无序类型:str()>int()
很好,他们在Py3k中更改了它。当我第一次看到这个问题时,我的想法是‘什么,这不会引起错误?’。2.x规则的一个例外是,不同类型按类型的名称排序,即“无”对象的比较总是小于其他所有类型。在3.x中,将“无”与另一个类型进行比较仍然会引发类型错误。@KarelBilek:bool是一个数字类型。True==1,所以它既不是<也不是>。它们的类型名称的字母顺序?你什么时候会希望这成为一个功能?谁会用它呢?有趣的事实:complex(1,0)>'abc'
是False
,但是complex(1,0)>complex(0,0)
引发了TypeError
很好,他们在Py3k中更改了它。当我第一次看到这个问题时,我的想法是‘什么,这不会引起错误?’。2.x规则的一个例外是,不同的类型按类型的名称排序,即None obj