繁体   English   中英

Python 将十六进制值从 0x00 转换为 0x0

[英]Python convert hex value from 0x00 to 0x0

我有 2 个十六进制数字列表,我需要检查一个列表的每个项目是否存在于第二个列表中,如果存在则删除它。 问题是,在第一个列表中,十六进制数字的格式为:0x00(如果它们 < 0x10),第二个列表中的十六进制数字格式为 0x0。 运行代码时,它不会删除第一个列表 = 0x00 和第二个列表 = 0x0 的项目,我希望在这种情况下,该项目将被删除

diff = second_hex_list            
for item in first_hex_list:
    if item in second_hex_list:
        diff.remove(item)

只需将它们转换为int进行比较。 您有第二个错误,您没有在进行更改之前复制列表(它应该是diff = second_hex_list[:] )。 但是列表理解是过滤这个的更好方法。

second = set(int(item, 16) for item in second_hex_list)
diff = [item for item in first_hex_list if int(item, 16) not in second]

您可以在搜索之前转换项目以匹配第二个列表的格式:

diff = second_hex_list            
for item in first_hex_list:
    if item.replace("0x0","0x") in second_hex_list:
        diff.remove(item)

这将涵盖您描述的特定问题,但可能不适用于实际数据中的所有情况(因此需要您提供有意义的输入和预期输出示例)。

请注意,如果您的列表非常大,您可能希望使用一个集合来有效地进行过滤:

first_hex_set = { item.replace("0x0","0x") for item in first_hex_list }
diff = [item for item in second_hex_list if item not in first_hex_set ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM