python - Numpy连接+合并一维数组
问题描述
我需要连接数组,但如果它们重叠,还需要将 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:]
推荐阅读
- vue.js - 允许 html/markdown 在 VuePress 中作为页脚
- css - 滑块内的图像封面
- java - Spring - applicationContext getBeansWithAnnotation 方法返回一个空列表
- javascript - 为什么状态不改变?
- java - 如何转换 ArrayList
向量 对于 JNI? - ruby-on-rails - 不知从何处获取“ActiveRecord::RecordNotFound in PostsController#show”
- python - nginx loadbalancer conf文件解析python
- c# - 如何在一条垂直线上生成所有值而不重复“\t”或“\n”?
- php - Php从印度格式的购买日期计算到期日期
- python - 每分钟调用相同的 API 超过 2000 次(JSON/PYTHON),使用(HTTP 同步、HTTP 异步、Websocket 或其他)?