我需要连接数组,但如果它们重叠,还需要将 A 的结尾与 B 的开头合并。
[1, 2, 4] + [2, 4, 5] -> [1, 2, 4, 5]
[1, 2, 4] + [2, 5, 4] -> [1, 2, 4, 2, 5, 4]
[1, 2, 4] + [1, 2, 4, 5] -> [1, 2, 4, 5]
注意:必须保留元素的顺序,[4, 5] 与 [5, 4] 不同。
注2:这道题也可以这样理解:我们需要对A进行尽可能短的扩展,使得输出以B结尾。
当然,我可以遍历第二个数组并逐个元素进行比较,但我正在寻找一个不错的 Numpy 解决方案。
最佳答案
原来是理解错了问题。问题是根据我的理解:
Two item suffix of A matches 2 item prefix of B:
[1, 2, 4] +
[2, 4, 5] =>
[1, 2, 4, 5]
No suffix of A matches a prefix of B:
[1, 2, 4] +
[2, 5, 4] ->
[1, 2, 4, 2, 5, 4]
然后我们可以使用这个非常低效的函数:
def merge(A,B):
i = 0
m = 0
# Find largest suffix of A that matches the prefix of B with the same length
while i <= len(A):
if A[-i:] == B[:i] and i > m:
m = i
i += 1
return A + B[m:]
关于python - Numpy 连接 + 合并一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57722109/