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"
更合适。
此外,我想将其添加为评论,但目前我不符合要求的声誉。
我有一个 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 完美提到的那样进一步详细说明,dtype="<U11"
,但是对于一般用例,dtype="object"
更合适。
此外,我想将其添加为评论,但目前我不符合要求的声誉。