Python列表中的字符串连接(字符串)与numpy数组(字符串)

时间:2017-02-13 05:06:56

标签: python arrays list numpy string-concatenation

出于我的应用程序的目的,我可以用两种方式声明一个字符串数组:

  1. 作为列表strArr1 = [""] * 5

  2. 作为一个numpy数组strArr2 = numpy.empty([5], dtype=str)

  3. 但是,当我尝试将字符连接到数组元素时,我看到以下区别。在第一种情况下,例如

    strArr1[0] += 'a'
    strArr1[0] += 'b'
    

    按预期['ab', '', '', '', '']给我。

    然而,在第二种情况下,

    strArr2[0] += 'a'
    strArr2[0] += 'b'
    

    给我结果['a', '', '', '', '']

    为什么连接不能正常工作numpy数组的元素?另外,鉴于我有一个限制,我必须一次扩展我的数组的元素一个字符,任何人都可以建议一个有效和pythonic方法?

    感谢。

2 个答案:

答案 0 :(得分:0)

  1. Numpy要求字符串数组具有固定的最大长度。您可以使用strArr2 = numpy.empty([5], dtype='S10'),其中10是每个项目可以容纳的字符串的最大值,更长的子字符串将被截断。

    strArr2 = numpy.empty([5], dtype=object)将使您能够将任意python对象存储到数组中,包括string

    请参阅Data type objects (dtype)

  2. 为了提高扩展字符串字符的效率,您可以尝试使用Python列表作为数据类型,然后将append每个新字符添加到列表中。完成所有字符后,使用join将列表转换回字符串。

答案 1 :(得分:0)

使用numpy.empty声明dtype='U10',虽然没有将我的添加标记为字节,即w / o b'abc',但失败了。

最后,为了提高效率,我将遵循Neo X的建议,这应该避免行为中的分布特定异常。

P.S。我正在使用Numpy 1.10.4 with Python 3.5.1