Python:字符串连接在 for 循环中的工作方式不同

Python: String concatenation working differently inside for loop

我有一个 NumPy 数组,其中包含一个包含各种长度字符串的列表:

arr = np.array(["abcd", "abcdef", "ab"])

我正在尝试遍历字符串以将它们填充到恒定长度。如果我一次做一个,就像这样:

new_len = 10

left_pad = divmod(new_len - len(arr[0]),2)[0]
right_pad = left_pad + divmod(new_len - len(arr[0]),2)[1]

abcd = arr[0].join(["_"*left_pad, "_"*right_pad])

我得到了我想要的输出:

'___abcd___'

但是如果我尝试循环执行,就像这样:

for i in range(arr.shape[0]):
    left_pad = divmod(new_len - len(arr[i]),2)[0]
    right_pad = left_pad + divmod(new_len - len(arr[i]),2)[1]
    arr[i] = arr[i].join(["_"*left_pad, "_"*right_pad])

我得到了这个不同的输出:

array(['___abc', '__abcd', '____ab'], dtype='<U6')

我想了解为什么这两种情况下的行为不同,以及如何通过循环获得所需的输出。在此先感谢您的帮助或建议。

尝试将数组定义为对象数组,如下例所示:

arr = np.array(["abcd", "abcdef", "ab"], dtype='object')

根据您示例的输出,您创建了一个长度为 6 (dtype='

如 daniboy000 完美提到的那样进一步详细说明,np.arr 的最长字符串的长度为 6。因此,为了测试,您也可以使用 dtype="<U11",但是对于一般用例,dtype="object" 更合适。

此外,我想将其添加为评论,但目前我不符合要求的声誉。