fac*_*cha 47 python formatting
我需要从随机整数列表(0-255)创建一个十六进制数字字符串.每个十六进制数字应由两个字符表示:5 - "05",16 - "10"等.
例:
Run Code Online (Sandbox Code Playgroud)Input: [0,1,2,3,127,200,255], Output: 000102037fc8ff
我设法提出:
#!/usr/bin/env python
def format_me(nums):
result = ""
for i in nums:
if i <= 9:
result += "0%x" % i
else:
result += "%x" % i
return result
print format_me([0,1,2,3,127,200,255])
Run Code Online (Sandbox Code Playgroud)
但是,这看起来有点尴尬.有更简单的方法吗?
gak*_*gak 118
为了完整起见,使用现代.format()
语法:
>>> numbers = [1, 15, 255]
>>> ''.join('{:02X}'.format(a) for a in numbers)
'010FFF'
Run Code Online (Sandbox Code Playgroud)
var*_*tec 52
''.join('%02x'%i for i in input)
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 31
>>> str(bytearray([0,1,2,3,127,200,255])).encode('hex')
'000102037fc8ff'
Run Code Online (Sandbox Code Playgroud)
Roe*_*ant 31
最近的,在我看来首选的方法是f-string
:
''.join(f'{i:02x}' for i in [1, 15, 255])
Run Code Online (Sandbox Code Playgroud)
旧格式样式是%
-syntax:
['%02x'%i for i in [1, 15, 255]]
Run Code Online (Sandbox Code Playgroud)
更现代的方法是.format
方法:
['{:02x}'.format(i) for i in [1, 15, 255]]
Run Code Online (Sandbox Code Playgroud)
最近,从 python 3.6 开始,我们接受了以下f-string
语法:
[f'{i:02x}' for i in [1, 15, 255]]
Run Code Online (Sandbox Code Playgroud)
请注意,f'{i:02x}'
工作如下。
:
是要格式化的输入或变量。x
表示字符串应该他X。f'{100:02x}'
是'64'
,f'{100:02d}'
(十进制)是'100'
和f'{100:02b}'
(二进制)是'1100100'
。02
表示字符串应该是左填充0
的最小长度2
。f'{100:02x}'
是'64'
并且f'{100:30x}'
是' 64'
。Sve*_*ach 16
另一种选择是binascii.hexlify
:
a = [0,1,2,3,127,200,255]
print binascii.hexlify(bytes(bytearray(a)))
Run Code Online (Sandbox Code Playgroud)
版画
000102037fc8ff
Run Code Online (Sandbox Code Playgroud)
这也是我机器上大字符串的最快版本.
在Python 2.7或更高版本中,您可以通过使用来进一步改进
binascii.hexlify(memoryview(bytearray(a)))
Run Code Online (Sandbox Code Playgroud)
保存bytes
呼叫创建的副本.
gak*_*gak 12
与我的其他答案类似,除了重复格式字符串:
>>> numbers = [1, 15, 255]
>>> fmt = '{:02X}' * len(numbers)
>>> fmt.format(*numbers)
'010FFF'
Run Code Online (Sandbox Code Playgroud)
从 Python 3.6 开始,您可以使用f-strings:
>>> number = 1234
>>> f"{number:04x}"
'04d2'
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
124488 次 |
最近记录: |