问题描述
令人惊讶的是,我在网上找不到太多东西。我有一个十六进制值列表,例如:
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))