我有以下数组(长度相同):
array_1=[1,2,3]
array_2=[4,5,6]
array_3=[7,8,9]
我需要的是连接两个数组中的每个元素以获得:
array_4=['1-4-7','2-5-8','3-6-9']
这必须在大约30000条记录上完成,所以我一直在寻找紧凑的东西。
答案 0 :(得分:6)
使用zip()
隔离列,str()
从每个元素创建字符串,str.join()
将字符串化元素连接在一起。
array_1=[1,2,3]
array_2=[4,5,6]
array_3=[7,8,9]
meta_array = [array_1, array_2, array_3]
array_4 = ['-'.join(str(item) for item in column) for column in zip(*meta_array)]
assert array_4==['1-4-7','2-5-8','3-6-9']
答案 1 :(得分:1)
使用numpy.column_stack()
的另一种方式:
import numpy as np
array_1=[1,2,3]
array_2=[4,5,6]
array_3=[7,8,9]
col_stacked = np.column_stack([array_1, array_2, array_3])
print(col_stacked)
#array([[1, 4, 7],
# [2, 5, 8],
# [3, 6, 9]])
现在只需遍历col_stacked
并使用"-"
加入值。首先,我们需要将值转换为str
,这可以使用map()
:
array_4 = ["-".join(map(str, a)) for a in col_stacked]
print(array_4)
#['1-4-7', '2-5-8', '3-6-9']
注意:column_stack()
仅在所有数组具有相同长度时才有效。
答案 2 :(得分:1)
在我看来,你想要一个新的字符串数组,其中包含来自所有数组的特定位置的元素。如果数组的数量很少,则以下代码应该是可能的解决方案:
for index in range(len(array_1)):
newFormedElement = str(array_1[index]) + '-' + str(array_2[index]) + '-' + str(array_3[index])
array_4.append(newFormedElement)
假设通过记录,表示数组中的元素数量。 但是,如果您正在使用30000阵列,则可能需要使用numpy并在整个阵列列表中进行迭代。
答案 3 :(得分:0)
您可以使用字符串格式:
array_1=[1,2,3]
array_2=[4,5,6]
array_3=[7,8,9]
last_result = ['{}-{}-{}'.format(*i) for i in zip(array_1, array_2, array_3)]
输出:
['1-4-7', '2-5-8', '3-6-9']