如何在Python中返回合并3个排序数组后的步骤



我只想在Python中合并3个排序数组,但不想要值只想要从哪里得到值的步骤

让我们说以下是的3个排序阵列

A = [1,3,4,6]
B = [2,3,4,5]
C = [1,5,9]

原始合并排序是

Sorted = [1,1,2,3,3,4,4,5,5,6,9]

但与其这样,我想从哪个阵列中获得的价值

Sorted = [A,C,B,A,B,A,B,B,C,A,C] 

你可以说我想要我们首先从哪个数组中得到的步骤&So On所以请指导我如何在Python上做到这一点?

一种方法:

from heapq import merge
from operator import itemgetter
A = [1, 3, 4, 6]
B = [2, 3, 4, 5]
C = [1, 5, 9]
lst = [[(val, label)for val in values] for label, values in zip(["A", "B", "C"], [A, B, C])]
res = [label for _, label in merge(*lst, key=itemgetter(0))]
print(res)

输出

['A', 'C', 'B', 'A', 'B', 'A', 'B', 'B', 'C', 'A', 'C']

首先,为每个输入列表创建一个元组列表,其中元组的第一个元素是值,第二个元素是指示原点的标签,这在以下行中完成:

lst = [[(val, label) for val in values] for label, values in zip(["A", "B", "C"], [A, B, C])]

然后使用heapq.merge合并列表,只使用元组的第一个元素作为比较的关键字,然后提取标签:

res = [label for _, label in merge(*lst, key=itemgetter(0))] 

以上代码等效于以下循环代码:

res = []
merged = merge(*lst, key=itemgetter(0))
for _, label in merged:
res.append(label)

最新更新