在Python中比较两个字符

3

在Python中比较两个字符(即一个字符str)是否被定义良好?还是我必须进行显式转换?

换句话说,以下代码是否相同:

'a' > 'b'

ord('a') > ord('b')


浏览源代码可以看到字符串比较使用了memcmp。这是非常明确的。它确实使用了字面字符编码。(在打字的同时,一个问题出现了。你还能期望什么?) - Jongware
'a' > 'b' 是一种字典序比较,而 ord('a') > ord('b') 则是一种数值比较。我不确定当只使用1个字符时是否会有所不同。 - byxor
@usr2564301,我不确定是因为Python没有内置的char类型。 - Benny K
1个回答

5

如果不确定,请查阅文档

字符串(str 类型的实例)使用它们字符的数字 Unicode 代码点(内建函数 ord() 的结果)按字典序进行比较。

因此,是的,这种行为是被明确定义好了的。


1
顺便提一句,使用某种自然语言的排序规则可能并不是人们所期望的 - 例如,在波兰字母ń在字母ó之前,但在 Python 中, 'ń' < 'ó'False,因为ord('ń')是324,而ord('ó')是243。同样,即使在瑞典语中å排在ä前面,'å' < 'ä'也是False - Błotosmętek
2
@Bloto:这是由于两个无关的原因。首先,Unicode顺序是“历史性”的而不是逻辑性的。一旦分配了现有的Unicode点,就不能重新定义它们。但是,可能更重要的是,这种排序规则因语言而异。这就是为什么正确的比较需要一个locale的原因。 - Jongware

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接