如何解决Python 中的十六进制值排序列表
令人惊讶的是,我在网上找不到太多东西。我有一个十六进制值列表,例如:
hex = ['0x1','0x2','0x10','0x7','0x1a']
最初是未排序的。如果我尝试通过列表上的 sort()
方法对其进行排序,它显然会将其排序为字符串,而不是整数。有没有一种简单的方法可以对这个列表进行排序,理想情况下没有外部库?
我认为排序函数应该是这样的:
def hex_sort(a,b):
a = int(a,0)
b = int(b,0)
return b - a
但是我还没有找到将这个函数传递给 sort()
的方法。我对 python (3.8) 不是很有经验。
解决方法
您可以将 key
参数用于 sort
或 sorted
函数:
hex_list.sort(key=lambda h: int(h,16))
或:
sorted(hex_list,key=lambda h: int(h,16))
key
不是比较器(比如在 Java 中);它用于将列表中的项目直接转换为具有您正在寻找的排序语义的内容。在这种情况下,它将十六进制字符串转换为它们的 int 表示。
(请注意,hex
是 Python 中的内置函数,因此您可能不想命名您的列表——它实际上是我们上面的 key
函数的完全相反,将 { {1}} 到它的 base-16 int
表示。)
我相信这应该可以解决问题:
array = ['0x1','0x2','0x10','0x7','0x1a']
sorted = list(map(lambda v: int(v,16),array))
sorted.sort()
result = []
for num in sorted:
result.append(hex(num))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。