对于ascii字符串'b' > 'a'
和'aa' > 'a'
,Python的字符串排序非常简单,就像通过词典排序一样。但是当字符串处于unicode时会发生什么?
我希望大于以下行为:
def greater_than(s1, s2):
return tuple(map(ord, s1)) > tuple(map(ord, s2))
即。我们按字典顺序比较每个序数。这是python的作用吗?
utf-8编码根据序列中的字节数对字符的第一个字节进行编码,按升序排列,因此如果字符串是utf-8编码的,则字节比较可以完成工作。我也想知道比较是否以这种方式实施。
答案 0 :(得分:0)
PyUnicode_Compare
:http://svn.python.org/projects/python/trunk/Objects/unicodeobject.c
它调用unicode_compare
,一个静态函数。您可以看到有两个版本:一个使用" fixups"处理无法直接作为数字进行比较的值,以及一个简单的实现。更聪明的"当前#if 0
隐藏了实现,这表明Python只是简单地比较了序数值:
while (len1 > 0 && len2 > 0) {
Py_UNICODE c1, c2;
c1 = *s1++;
c2 = *s2++;
if (c1 != c2)
return (c1 < c2) ? -1 : 1;
len1--; len2--;
}