0

我想将 Python 中的整数列表转换为字符,

这是我所做的,

S = [55, 58, 5, 13, 14, 12, 22, 20, 70, 83, 90, 69, 84, 91, 80, 91]

D = ""
for i in S:
    D += chr(i)
D = ''.join(map(str, D))

这不起作用,因为 is 的值chr,它将返回行的开头并导致前四个值的驱逐。13\r

输出将仅是字符值14, 12, 22, 20, 70, 83, 90, 69, 84, 91, 80, 91(由于 \r,前四个值将被删除)

这是输出,

♫♀▬¶FSZET[P[

因此,它不能转换回原始整数值。

第二种方法,

如果我这样做,

S = [55, 58, 5, 13, 14, 12, 22, 20, 70, 83, 90, 69, 84, 91, 80, 91]
print(repr( ", ".join(map(str, map(chr, S)))))

它有效,但它会输出,

'7, :, \x05, \r, \x0e, \x0c, \x16, \x14, F, S, Z, E, T, [, P, ['

但是,如果我使用将其转换回整数,ord则每个字符将分别转换,包括x , \等....

D = repr( ", ".join(map(str, map(chr, S))))
for i in D:
    print(ord(i))

我想将整数转换为字符串,然后再转换回整数。最终输出应该是原始整数列表,

[55, 58, 5, 13, 14, 12, 22, 20, 70, 83, 90, 69, 84, 91, 80, 91]

我怎么能做到这一点。?

4

3 回答 3

2
import ast

string_version = str(S)
list_version = ast.literal_eval(string_version)

此外,以下工作正常:

string_version = ''.join(chr(s) for s in S)
list_verison = list(ord(s) for s in string_version)

\r不会删除前四个字符,它只是让它以这种方式打印到终端,并且字符串不是很容易阅读。

如果需要,您可以进一步缩写:

string_version = ''.join(map(chr, S))
list_version = list(map(ord, string_version))

\r如果您需要将其打印string_version到终端,然后将其复制粘贴并读回或类似的东西,这可能会导致问题。在这种情况下,您可以这样做:

string_version = repr(''.join(map(chr, S)))
# print, copy, paste, etc.
list_version = list(map(ord, ast.literal_eval(string_version)))

与我的第一个代码片段相比,它的可读性较差,但它可能更紧凑。

于 2013-10-20T15:08:49.940 回答
1

你可以bytearray在这里使用:

S = [55, 58, 5, 13, 14, 12, 22, 20, 70, 83, 90, 69, 84, 91, 80, 91]

as_str = str(bytearray(S))
print list(bytearray(as_str))
# [55, 58, 5, 13, 14, 12, 22, 20, 70, 83, 90, 69, 84, 91, 80, 91]
于 2013-10-20T15:14:25.213 回答
0

给定一个列表 integers s,您可以使用以下命令创建输出字符串d

s = [...]
d = "".join(map(chr, [letter for letter in s]))

您可以使用以下命令将字符串转换d回列表:

d = "..."
s = map(int, map(ord, list(d)))
于 2013-10-20T15:18:51.857 回答