python 3中的字符数组?

新手上路,请多包涵

Python 2.7 中,我可以像这样创建一个字符数组:

 #Python 2.7 - works as expected
from array import array
x = array('c', 'test')

但在 Python 3'c' 不再是可用的类型代码。如果我想要一个字符数组,我该怎么办? 'u' 类型也被删除。

 #Python 3 - raises an error
from array import array
x = array('c', 'test')

类型错误:无法使用 str 来初始化类型代码为“c”的数组

原文由 CZ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 650
2 个回答

使用字节数组“b”,编码为 unicode 字符串。

使用 array.tobytes().decode()array.frombytes(str.encode()) --- 与字符串相互转换。

 >>> x = array('b')
>>> x.frombytes('test'.encode())
>>> x
array('b', [116, 101, 115, 116])
>>> x.tobytes()
b'test'
>>> x.tobytes().decode()
'test'

原文由 Mark Perryman 发布,翻译遵循 CC BY-SA 3.0 许可协议

似乎 python 开发人员不再支持在数组中存储字符串,因为大多数用例将使用新的 bytes 接口bytearray@MarkPerryman 的解决方案 似乎是您最好的选择,尽管您可以使用子类使 .encode().decode() 透明:

 from array import array

class StringArray(array):
    def __new__(cls,code,start=''):
        if code != "b":
            raise TypeError("StringArray must use 'b' typecode")
        if isinstance(start,str):
            start = start.encode()
        return array.__new__(cls,code, start)

    def fromstring(self,s):
        return self.frombytes(s.encode())
    def tostring(self):
        return self.tobytes().decode()

x = StringArray('b','test')
print(x.tostring())
x.fromstring("again")
print(x.tostring())

原文由 Tadhg McDonald-Jensen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题