我只想在 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]
你可以說我想要從哪個陣列中我們首先得到的步驟等等,所以指導我如何在 Python 上做到這一點?
uj5u.com熱心網友回復:
一種方法:
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))]
上面的代碼等價于下面的for回圈:
res = []
merged = merge(*lst, key=itemgetter(0))
for _, label in merged:
res.append(label)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/365845.html
