【问题标题】:Python char array declarationPython char 数组声明
【发布时间】:2016-04-13 01:08:58
【问题描述】:

有没有办法在 python 中声明一个固定大小的字符数组,例如在 C 中
char myArray[100]
我还想用 NULL 初始化所有字符。

【问题讨论】:

  • 也许这个帖子有帮助:stackoverflow.com/questions/6142689/…
  • 或者你可以查看这个one
  • 您期望的好处是什么?
  • 我用 C 语言编写了一个模块,它有一个函数可以将一些内容写入作为参数传递的输出字符串。我在将字符串传递给函数之前在 python 中声明了字符串,例如:buf = 'test' myFunc(buf) 现在我希望字符串的长度根据函数提供的输出自动增长,但似乎字符串的长度是通过声明固定的.所以在这种情况下它是 4,例如,如果函数向它写入“thisisanoutput”,则函数返回后 buf 的值是“this”。

标签: python arrays char


【解决方案1】:

你不能有一个 固定 大小的字符串。 (Python 不能那样工作)。但是你可以很容易地将一个字符串初始化为 100 个字符:

myArray = "\0" * 100

【讨论】:

    【解决方案2】:

    您可以使用array(python 中的数组具有固定类型签名,但不是固定大小):

    >>> import array
    myArray = array.array('c', ['\0' for _ in xrange(100)])
    
    >>> myArray
    array('c', '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
    >>> myArray[45]
    '\x00'
    

    请注意,我在 python 中将默认值初始化为 '\0',因为您必须使用一个值对其进行初始化,并且数组没有固定大小(它是动态的),但可以这样做。

    另一种选择是初始化数组并稍后附加值,因此它不会充满 NULL(在 python 中为 None),它将只是空的并且可以随意增长:

    >>> a = array.array('c',)
    >>> a
    array('c')
    >>> a.append('c')
    >>> a
    array('c', 'c')
    

    【讨论】:

    • 这成功了,尽管我必须先使用 tostring() 函数将数组转换为字符串。
    • 漂亮,快乐的编码:)
    • 在 Python 3 中,'c' 不再是有效的type code
    【解决方案3】:

    另一种方法是使用numpy.chararray:

    import numpy as np
    myArray=np.chararray(100)
    myArray[:]=0  #NULL is just a zero value
    

    结果:

    >>> myArray
    chararray([b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0',
               b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0', b'0'],
              dtype='|S1')
    

    【讨论】:

    • 任何线索如何在打印出来时删除数组中的字节前缀?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 2015-07-29
    • 2011-05-23
    • 1970-01-01
    相关资源
    最近更新 更多