首页 > 解决方案 > 如何根据相应的 ascii 值对列表进行排序?

问题描述

list1 = ['a', 'b', 'c', 'd', 'ab', 'bc', 'cd', 'abc', 'bcd', 'abcd']

如何根据它的对应ascii值对该列表值进行排序?

sorted(list1, key=len,reverse=True)
Outputs      : ['abcd', 'abc', 'bcd', 'ab', 'bc', 'cd', 'a', 'b', 'c', 'd']
ascii values : [394, 294, 297, 195, 197, 199, 97, 98, 99, 100]

试过这个,它打印 ascii 值。但可能我需要存储在字典中。然后对其进行排序,然后提取。任何简单且最佳的处理方式(可能使用映射或不使用任何其他列表/字典)。

for i in list1:
    print(i, sum(map(ord, i)))

基于 ascii 的预期输出(降序):

['abcd', 'bcd','abc','cd','bc','ab', 'd', 'c', 'b','a']
[ 394  ,  297,  294,  199, 197, 195, 100,  99,  98, 97]

标签: python-3.xlistsortingascii

解决方案


您可以只使用您的 ascii 转换函数作为排序键来按这些值排序:

list1 = ['a', 'b', 'c', 'd', 'ab', 'bc', 'cd', 'abc', 'bcd', 'abcd']

print(sorted(list1, key = lambda s: sum(map(ord, s)), reverse=True))

输出

['abcd', 'bcd', 'abc', 'cd', 'bc', 'ab', 'd', 'c', 'b', 'a']

请注意,这将使list1与原始列表中具有相同 ascii 值的值排序(因为 python 排序是稳定的)。您可能希望以与列表其余部分相同的顺序对它们进行排序(例如'da'将排序 before 'ad'),在这种情况下,您只需将当前值添加到 key 函数,以便它首先按 ascii 值排序,然后实际字符串:

sorted(list1, key = lambda s: (sum(map(ord, s)), s), reverse=True)

感谢@superbrain 对这些编辑的输入。


推荐阅读