Python 中的十六进制值排序列表
Sorting list of hex values in 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
完全相反上面的函数,将 int
转换为它的 base-16 str
表示。)
我相信这应该可以完成工作:
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))
令人惊讶的是,我在网上找不到太多。我有一个十六进制值列表,例如:
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
完全相反上面的函数,将 int
转换为它的 base-16 str
表示。)
我相信这应该可以完成工作:
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))