python-3.x - 如何根据相应的 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]
解决方案
您可以只使用您的 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 对这些编辑的输入。
推荐阅读
- android - 如何在android8.0以上未经许可的情况下获取gps数据?
- python - 如何将参数/参数传递给子任务集以及如何在一个任务函数中启动另一个任务集?
- ios - 模块'Core'和'UserInterface'之间的Xcode循环依赖
- spring-boot - spring aop @target 和 @within throw IllegalAccessError
- php - __DIR__ PHP 代码实现错误的主目录的问题
- facebook - facebook 广告间谍工具如何抓取数据?
- python - 如何用可调用的类对象回调处理程序替换 lambda 回调处理程序?
- python - 我该如何解决这个问题:AttributeError:模块'tensorflow_core.python.keras.api._v2.keras'没有属性'Dense'
- javascript - 我的机器人回复被标记为“显示其他回复......”
- ruby - 使用 search-tweets-ruby 进行身份验证(高级 API)