Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种标准的方法可以按照非英语字母表进行排序?例如,罗马尼亚字母是;aăâ;b、c.“;_Python_Sorting_Standards_Alphabetical_Non English - Fatal编程技术网

Python 有没有一种标准的方法可以按照非英语字母表进行排序?例如,罗马尼亚字母是;aăâ;b、c.“;

Python 有没有一种标准的方法可以按照非英语字母表进行排序?例如,罗马尼亚字母是;aăâ;b、c.“;,python,sorting,standards,alphabetical,non-english,Python,Sorting,Standards,Alphabetical,Non English,可能重复: 作为世界其他地方的公民,我真的很恼火,因为默认情况下计算机不能适应处理国际问题。许多网站仍然不使用Unicode,PHP仍然处于黑暗时代 当我想用罗马尼亚语对单词或名称列表进行排序时,我总是要编写自己的函数,这几乎没有效率。必须有一些区域设置使排序函数遵守指定语言的字母顺序,对吗 我主要对Python、Java和JavaScript感兴趣 EDIT:正如Chris Morgan指出的那样,我找到了Python的答案。在Python中,您可以始终使用带有关键参数的排序函数。例如,在土

可能重复:

作为世界其他地方的公民,我真的很恼火,因为默认情况下计算机不能适应处理国际问题。许多网站仍然不使用Unicode,PHP仍然处于黑暗时代

当我想用罗马尼亚语对单词或名称列表进行排序时,我总是要编写自己的函数,这几乎没有效率。必须有一些区域设置使排序函数遵守指定语言的字母顺序,对吗

我主要对Python、Java和JavaScript感兴趣


EDIT:正如Chris Morgan指出的那样,我找到了Python的答案。

在Python中,您可以始终使用带有关键参数的排序函数。例如,在土耳其语中,我们有像‘ç’、‘ı’、‘ş’等字母。如果我想根据该字母排序,我会使用一个键字符串对字母进行排序,并根据以下内容对字符串进行排序:

>>> letters="abcçdefgğhıijklmnoöprsştuüvyz" #Turkish alphabet
>>> sorted("açobzöğge")
['a', 'b', 'e', 'g', 'o', 'z', 'ç', 'ö', 'ğ'] #Python's default
>>> sorted("açobzöğge", key=lambda i: letters.index(i))
['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z'] #With key parameter
注意:使用Python 3;处理Unicode更容易

编辑,正如评论所说,如果我们使用字典,这个过程将更加有效:

>>> letters="abcçdefgğhıijklmnoöprsştuüvyz"
>>> d={i:letters.index(i) for i in letters}
>>> sorted("açobzöğge", key=d.get)
['a', 'b', 'ç', 'e', 'g', 'ğ', 'o', 'ö', 'z']

没有一种单一、统一的排序算法适用于所有语言,因为许多语言都有非常特定的排序规则

它甚至更进一步:即使在一种语言中,排序算法也可能因其用途而有所不同(例如,在德语词典中,排序与电话簿略有不同)

整个主题称为。维基百科上的这篇文章也是相关的


似乎有一个项目为许多语言实现了正确的排序。

Um,您不能获取UTF-8中的字节值并根据它进行排序吗?我的意思是,大多数排序函数都遵循你给它们的比较器的顺序,你可以用任何你喜欢的方式定义它……不。在Unicode中,“z”在“ă”之前。这就是重点。我意识到duplicate只处理Python,但Java也有ICU——虽然没有JavaScript版本。是的,你说得对,Chris。我的搜索技能没能找到那个。我找到了Python的答案:设置区域设置,然后设置list.sort(cmp=locale.strcoll)。更糟糕的是,仅字符有时还不足以进行排序。例如,在匈牙利语中,“csiga”(蜗牛)一词出现在“cukor”(糖)之后,而不是前面。为什么?因为“cs”被认为是一个字母,即使它由两个字形表示。我认为这正是他所说的“几乎没有效率”。我认为它没有那么低效率。我认为没有比这更有效的代码了(可能是一些小的调整)。多次使用
索引
比准备一个字典将字母映射为整数效率要低。这是低效的,因为
字母。索引(I)
查找是
O(n)
——这是在一个紧密的循环中调用的。您可能想先将此添加到词典中,然后像那样查找。谢谢,用词典编辑答案。