从 0 到 f 的字符列表

char list from 0 to f

我写了一个python脚本,它需要一个所有十六进制字符的列表。

list(string.printable[:16]) 得到 ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'] 是个好主意吗?

如何list('0123456789abcdef') 使其明确化?

如果不想拼出来,[f'{i:x}' for i in range(16)]应该也可以。

最简单的方法是从 0 到 15 的所有数字的列表理解,格式为十六进制:

["{:x}".format(x) for x in range(0,16)]

用户 GarbageCollector 在评论中提出了一个不错的替代方案,必须对其进行修改以删除多余的大写字符:

>>> import string
>>> string.hexdigits
'0123456789abcdefABCDEF'
>>> string.hexdigits[:16]
'0123456789abcdef'

获取列表:

>>> list(string.hexdigits[:16])

然而,在未来的 python 版本中 string.hexdigits 中字符的顺序保持不变的事实是未知的。仍然很高兴知道 string 有许多有用的字符组。

你的问题的答案是:这不是一个特别好的主意。

来自Python docs

string.printable

String of ASCII characters which are considered printable. This is a combination of digits, ascii_letters, punctuation, and whitespace.

Python 的实现可以遵循此定义,但选择以不同的顺序提供字符,这可能会破坏您的代码。

即使定义了顺序,如果不熟悉定义,代码会产生什么结果也不是很明显。

有一个string.hexdigits常数,它的值严格定义为'0123456789abcdefABCDEF',所以取它的前16位肯定是更好的选择,但我还是会说,只要给确切的字符串本身会更清楚。

另请注意,无论如何 '01234567890abcdef' 实际上比 string.hexdigits[:16] 短两个字符。