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

问题描述

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

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

sorted(list1,key=len,reverse=True)
Outputs      : ['abcd','a','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','a']
[ 394,100,97]

解决方法

您只需使用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','a']

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

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

感谢@superbrain输入这些编辑内容。

,
list1 = ['a',reverse=True,key=lambda k: sum(ord(ch) for ch in k)))

打印:

['abcd','a']
,

在这里,您可以使用相应的ascii值列表。

sorted_list1 = [i for _,i in sorted(zip([sum(map(ord,x)) for x in list1],list1),reverse=True)]
sorted_list1
output : ['abcd','a']
,

您可以通过函数定义键 由于您是将字符串中所有字符的总和作为ascii值,因此您可以定义一个方法来生成ascii值并按其排序

def to_ascii(var):
    if len(var) > 0:
        # sum by char
    else:
        # return ascii

sorted(list1,key=to_ascii,reverse=True)

输出:

['abcd','a']