Python中生成十六进制列表为何返回字符串列表?
问题解析与解决
核心原因:hex()函数的本质
Python的hex()函数作用就是将整数转换为十六进制格式的字符串,不管是单独调用还是放在列表推导式里,它的返回值都是字符串类型。你看到的['0xc1', '0x50', '0x40']是这个函数的正常输出,和列表推导式无关。
关于十六进制字面量的说明
你直接写[0xc1, 0x50, 0x40]时,0xc1这类写法是Python的十六进制整数字面量——它本身就是整数类型,Python在存储和打印时会自动以十进制形式展示,所以输出结果是[193, 80, 64]。
你的代码冗余点
你的代码做了没必要的步骤:
- 先给原列表元素加
0x得到newlist,再用int(item, 16)转整数——其实int('C1', 16)本身就能直接识别不带0x的十六进制字符串,不需要额外拼接前缀。 - 后续又用
hex()把整数转回字符串,这就是最终得到字符串列表的直接原因。
对应需求的正确写法
需求1:得到整数列表(和[0xc1, 0x50, 0x40]等价)
直接将原列表元素转为整数即可:
original_list = ['C1', '50', '40'] int_list = [int(item, 16) for item in original_list] print(int_list) # 输出: [193, 80, 64]
需求2:得到十六进制格式的字符串列表
如果确实需要字符串形式的十六进制值,代码可以简化:
original_list = ['C1', '50', '40'] hex_str_list = [hex(int(item, 16)) for item in original_list] # 或者用f-string更直观:[f"0x{item.lower()}" for item in original_list] print(hex_str_list) # 输出: ['0xc1', '0x50', '0x40']
内容的提问来源于stack exchange,提问作者HexBlunder
相关产品推荐
相关产品推荐

