我正在使用下面的代码表单排序:
letters = '세븐일레븐'
old = [('세븐', 8), ('븐', 2), ('일', 5), ('레', 4)]
new = sorted(old, key=lambda x: letters.index(x[0]))
对于非拉丁字符,输出与输入相同:
[('세븐', 8), ('븐', 2), ('일', 5), ('레', 4)]
我所期待的是:
[('세븐', 8), ('일', 5), ('레', 4), ('븐', 2)]
发布于 2016-03-15 07:51:17
排序没有问题。请注意,字母'븐‘在字母字符串中出现了两次。由于index返回该字母的第一个索引,因此letters.index('븐')的计算结果为1,这将赋予它较高的优先级。
发布于 2016-03-15 07:54:33
为什么期望'일'
在'븐'
之前排序?'븐'
是letters
中的第二个字符;index
将返回它找到的第一个实例。
如果目标是区别对待特定序列,则需要将letters
定义为您关心的完整字符串的list
,而不是单个平面str
,例如:
letters = ['세븐', '일', '레', '븐']
然后,index
调用会将'세븐'
视为独立于'븐'
,您将获得预期的输出顺序。
https://stackoverflow.com/questions/36000178
复制相似问题