巨蟒山<;python等等,为什么? >“Monty”>>“Z”>>“蒙蒂”

巨蟒山<;python等等,为什么? >“Monty”>>“Z”>>“蒙蒂”,python,Python,这有什么规定?是字母数还是什么? 谢谢这是词典排序。所以“a”

这有什么规定?是字母数还是什么?
谢谢

这是词典排序。所以“a”<“b”

如果使用
ord()
函数,可以看到“Z”的值低于“a”


按照字母在ASCII范围内定义的顺序进行词汇排序,因此:

>>> ord('Z')
90
>>> ord('a')
97
这就是为什么
'Z'
是正确的


比较两个字符串时,将比较每个字符,如果一个大于另一个,则字符串更大,如果它们相等,则移动到下一个字符。如果到达其中一个字符串的末尾,而另一个字符串仍然有字符,则最长的字符串更大,否则,它们相等。

Python字符串、元组和列表使用比较

元组示例:

A ... Za ... z
>(1,2)<(2,1)
符合事实的
>>> (1,2) < (1,2,-5)
符合事实的

想法很简单:逐元素比较(对于字符串,逐字符比较),直到有差异或一个更短。

小心不要将此顺序与区分区域设置的排序规则序列混淆。例如:

>>> (1,2) < (2,1)
True
>>> (1,2) < (1,2,-5)
True
>>> locale.setlocale(locale.LC_ALL,"")
'English_United Kingdom.1252'
>>> locale.strcoll("Z","a")
1
>>> "Z" < "a"
True
区域设置可以更改排序规则序列,但(此处)不能使用普通比较。英文排序顺序为aAbBcC…xxyyz(适用于其他“en”语言环境)。 例如:

>>> (1,2) < (2,1)
True
>>> (1,2) < (1,2,-5)
True
>>> locale.setlocale(locale.LC_ALL,"")
'English_United Kingdom.1252'
>>> locale.strcoll("Z","a")
1
>>> "Z" < "a"
True
对于非ASCII字符,请考虑:

>>> ml=["a","b","c","A","B","C"]
>>> sorted(ml)
['A', 'B', 'C', 'a', 'b', 'c']
>>> sorted(ml,key=locale.strxfrm)
['a', 'A', 'b', 'B', 'c', 'C']
>>> 
>locale.strcoll(“é”,“f”)
-1
>>>“é”<“f”
错误的

您还期望得到什么?比较是基于ASCII值的。根据我有限的经验,它可以归结为内的字母。在第一个例子中,M在ASCII“字典”中小于P,因此Monty小于Python。由于Z小于a,因此表示该字符串的位再次低于表示另一个字符串的位。在最后一个字母中,前四个字母匹配,但第五个字母将y与a进行比较,a显然排在第一位,因此较少。如果第二个字母以小写字母m而不是大写字母m开头,那么它将返回true。希望这能帮上忙,如果你愿意的话,我可以把它写进一个答案。这就是问题的全部。使用不等式运算符比较字符串,例如“Monty”<“Python”。当你做“Z”和“a”时会发生什么?尝试使用前缀相同的字符串对,例如“Monty”<“Montague”。阅读“词典排序”以了解这里发生了什么。尝试比较结构化对象,例如('Monty',1)<('Monty',2)。这是否符合预期?“词法”,而不是“字母”。GJ也打败了我:)但真正决定它的是ASCII码,而不是字母本身。如果是字母,那么Z将大于a,而不是小于a。什么是ASCII?我们如何知道这些值呢?ASCII是一组字符——几乎是普通键盘上的键。还有其他更广泛的集合,比如Unicode,它涵盖了更广泛的语言集合——大部分是非欧洲语言,所以我想我现在明白了。非常感谢。
>>> locale.strcoll("é","f")
-1
>>> "é" < "f"
False