如何从 python 中的生成器表达式打印 unicode?

How to print unicode from a generator expression in python?

从生成器表达式创建一个列表:

V = [('\u26' + str(x)) for x  in range(63,70)]

第一个问题:如果您尝试仅使用 "\u" + str(...),它会立即给出解码器错误。似乎它试图在看到 \u 时立即解码,而不是在整个块准备就绪时尝试解码。我正在尝试使用双反斜杠解决这个问题。

其次,这创造了一些有前途的东西,但实际上仍然无法将它们作为 unicode 打印到控制台:

>>> print([v[0:] for v in V])
['\u2663', '\u2664', '\u2665', .....]
>>> print(V[0])    
\u2663

我希望看到的是一个符号列表,这些符号看起来与使用 '\u0123' 等命令时相同,例如:

>>> print('\u2663')
♣

有什么方法可以从生成的列表中做到这一点?或者有没有更好的方法来打印它们而不是 '\u0123' 格式?

这不是我想要的。我想查看实际绘制的符号,而不是 Unicode 值:

>>> print(['{}'.format(v[0:]) for v in V])
['\u2663', '\u2664', '\u2665', '\u2666', '\u2667', '\u2668', '\u2669']

Unicode 是字符到字节的编码,而不是转义序列。 Python 3 个字符串是 Unicode。要 return 对应于 Unicode 代码点的字符,请使用 chr :

chr(i) Return the string representing a character whose Unicode code point is the integer i. For example, chr(97) returns the string 'a', while chr(8364) returns the string '€'. This is the inverse of ord().

The valid range for the argument is from 0 through 1,114,111 (0x10FFFF in base 16). ValueError will be raised if i is outside that range.

生成2663到2670之间的字符:

>>> [chr(x) for x  in range(2663,2670)]
['੧', '੨', '੩', '੪', '੫', '੬', '੭']

尽管转义序列使用十六进制表示法。 0x2663十进制是9827,0x2670变成9840.

>>> [chr(x) for x  in range(9827,9840)]
['♣', '♤', '♥', '♦', '♧', '♨', '♩', '♪', '♫', '♬', '♭', '♮', '♯']

您也可以使用十六进制数字文字:

>>> [chr(x) for x  in range(0x2663,0x2670)]
['♣', '♤', '♥', '♦', '♧', '♨', '♩', '♪', '♫', '♬', '♭', '♮', '♯']

或者,使用与问题完全相同的逻辑

>>> [chr(0x2600 + x) for x  in range(0x63,0x70)]
['♣', '♤', '♥', '♦', '♧', '♨', '♩', '♪', '♫', '♬', '♭', '♮', '♯']

原始代码不起作用的原因是当我们不能或不想键入字符本身时,转义序列用于表示字符串中的单个字符。解释器或编译器立即用相应的字符替换它们。字符串 \u26 是转义后的 \ 后跟 u26:

>>> len('\u26')
4