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

时间:2015-01-12 09:47:35

标签: python string list spi

我试图通过Raspberry Pi上的SPI端口读取刺痛。这是我测试端口的代码:

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)

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

答案很有用,因为我不知道如何转换数据。然而真正的问题是我正在与之接口的设备。答案对于找到真正的问题非常有用,非常感谢!我仍然是python的新手,所以这些事情都有点麻烦。

3 个答案:

答案 0 :(得分:6)

您可以bytearray使用str.joinchr()

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

答案 1 :(得分:1)

如果我说得对,你想将[72,101,108,108,111]转换为'你好'

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

输出:

Hello

答案 2 :(得分:1)

还要考虑将转换后的字符附加到字符串,例如

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'