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 参数用于 sortsorted 函数:

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))