如何在Python的print字符串中高效格式化十六进制数?
高效格式化十六进制数到字符串任意位置
这里有几种简洁的实现方式,满足在字符串任意位置插入格式化后的十六进制数需求:
方法1:f-string + 字符串拼接(最直观)
利用f-string的灵活性,先把列表分成需要的分组,每组内的元素格式化为两位带0x前缀的十六进制字符串,再用空格连接:
a = [1, 2, 10, 30] # 拆分列表为前后两组,分别格式化 part1 = ' '.join(f'0x{x:02x}' for x in a[:2]) part2 = ' '.join(f'0x{x:02x}' for x in a[2:]) print(f"Setting new address: [{part1}]->[{part2}]")
方法2:一次性在f-string中处理(更紧凑)
如果不想单独定义变量,可以直接在f-string内完成分组和拼接:
a = [1, 2, 10, 30] print(f"Setting new address: [{' '.join(f'0x{x:02x}' for x in a[:2])}]->[{' '.join(f'0x{x:02x}' for x in a[2:])}]")
方法3:使用str.format()(兼容Python 3.5之前版本)
如果需要兼容更早的Python版本,用str.format()配合生成器表达式:
a = [1, 2, 10, 30] fmt_str = "Setting new address: [{}]->[{}]" part1 = ' '.join('0x{:02x}'.format(x) for x in a[:2]) part2 = ' '.join('0x{:02x}'.format(x) for x in a[2:]) print(fmt_str.format(part1, part2))
原代码问题说明
- 第一个print语句写法错误:用逗号分隔格式串和参数会让print把它们当成多个独立参数输出,而非格式化字符串。即便修正为
%或.format()语法,逐个传入参数的方式在元素数量多的时候也会非常繁琐。 - 第二个print语句直接用
%s替换整个列表的格式化结果,会输出列表的原生字符串表示(比如['0x01', '0x02', '0x0a', '0x14']),不符合预期格式。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

