将包含字符的列表转换为字符串 (Python)

Convert a list with characters to a string (Python)

我正在尝试通过 Raspberry Pi 上的 SPI 端口读取一个 sting。这是我测试端口的代码:

raw = 0
string = ""

SPI = spidev.SpiDev()
SPI.open(0,0)

while True:
    raw = SPI.xfer2([0])
    string += str(chr(raw))
    print string
    print raw
    time.sleep(0.2)

结果是 "Hellinsert gibberish" 所以它在第四个字符后失败。我尝试发送 "Hello World!" 我发送的数据在列表中被格式化为字符,例如 "Hello" 看起来像 [72, 101, 108, 108, 111]。如何将其转换为字符串?

答案很有用,因为我不知道如何转换数据。然而,真正的问题是我正在连接的设备。答案对于找到真正的问题很有用,非常感谢!我对 python 还是很陌生,所以这些东西有点难以理解。

如果我没猜错,你想将 [72, 101, 108, 108, 111] 转换为 'Hello'?

data = [72, 101, 108, 108, 111]
string = "".join([chr(n) for n in data])
print string

输出:

Hello

您可以使用 bytearray or str.join with chr():

>>> lst =  [72, 101, 108, 108, 111]
>>> str(bytearray(lst))
'Hello'
#or
>>> ''.join(chr(x) for x in lst)
'Hello'

考虑将转换后的字符附加到字符串中,像这样,

str = ""
for c in [chr(n) for n in lst]:
    str += c

更新

以函数式编程风格,如下,

from functools import reduce
reduce( (lambda x,y: x + chr(y)), [72, 101, 108, 108, 111], "")

其中 reduce 将 lambda 函数应用于列表中的每个项目,从空字符串(最后一个参数)开始。 lambda函数可以这样定义,

def append(str,n): return str + chr(n)

因此对 reduce 的调用变得不那么冗长,

reduce( append, [72, 101, 108, 108, 111], "")
'Hello'