Python中将整数数组转换为字符串

6

我有一个整数数组,需要把它转换成字符串。

[1,2,3,4] => '\x01\x02\x03\x04'

我该使用哪个函数呢?我尝试了str(),但它返回的是'1234'。
string = ""
for val in [1,2,3,4]:
    string += str(val) # '1234'

4
“str”不可能返回“'1234'”。“str([1,2,3,4])”返回“'[1, 2, 3, 4]'”(这就是为什么最好展示你的代码,而不是试图描述它。你可能非常接近解决方案,但我们无从得知,因为我们不知道你做了什么)。 - abarnert
3个回答

9

''.join([chr(x) for x in [1, 2, 3, 4]])


仅仅比我慢了几秒钟就抢先回答了。这就是答案。 - coder543
我最喜欢这个答案,因为它基本上不受Python版本的影响。正如abarnert的答案所示,他的每个解决方案都高度依赖于您使用的Python版本。 - leetNightshade
@leetNightshade:“2.6-2.7和3.0+”并不是“高度依赖”。这包括了过去5年中发布的每个版本,很可能在未来十年内也是如此。我还提供了仅适用于2.x和3.x版本的代码,因为它们看起来更简单、更符合习惯,但如果您更关心2.x/3.x版本,那么您也可以使用这个版本。与此同时,这个版本并不是真正的通用,因为它在3.x中给出了一个str而不是bytes,这很可能不是您想要的。 - abarnert
@abarnert 为什么你想要它变成字节?关于这个问题,prosseek问如何将整数数组转换为字符串,而不是字节。 - leetNightshade
@abarnert 此外,这个版本更加便携,因为它可以在 Python 2.0+ 上运行(添加了列表推导式),我认为这是一个优势(它可以在追溯到 13 年前的 Python 版本上运行)。 - leetNightshade
1
@leetNightshade:在Python 2.x中,“string”表示str,用于文本字符串和字节字符串,因此没有关系。当移植到3.x时,您必须根据上下文判断其意图。我猜测OP的意图是字节,因为几乎所有合理的控制字符序列使用——终端转义序列、网络协议等——都是8位上下文,而不是Unicode文本上下文。如果他考虑的是Unicode代码点而不是8位字符,则U+0001到U+0004将是奇怪的选择。 - abarnert

4
您可以直接将一个小数值的list转换为bytearray

如果它是一个可迭代对象,则必须是在范围0 <= x <256内的整数的可迭代对象,这些整数被用作数组的初始内容。

您甚至可以将bytearray直接转换为str(2.x)或bytes(3.x或2.6+)。

事实上,在3.x中,您甚至可以直接将列表转换为bytes,而无需经过bytearray

构造函数参数的解释与bytearray()相同。

因此:

str(bytearray([1,2,3,4])) # 2.6-2.7 only
bytes(bytearray([1,2,3,4])) # 2.6-2.7, 3.0+
bytes([1,2,3,4]) # 3.0+ only

如果你真的想要一个字符串在3.x版本中,而不是一个字节字符串,你需要对它进行解码:

bytes(bytearray([1,2,3,4])).decode('ascii')

请查看文档中的二进制序列类型以获取更多详细信息。


好的回答,我忘记了bytearray()。 - LISTERINE

2

简单解决方案

digits = [1,2,3,4]
print(''.join(map(str,digits)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接