我有兩個元組串列:
a=[(name_2,array_2),(name_7,array_7),...,(name_n,array_n)]
b=[(name_3,arr_3),(name_12,arr_12),...,(name_n,arr_n)]
我想根據它們的名稱組合它們,這是每個集合中每個元組的第一個值。串列不按名稱排序。結果應如下所示:
combined=[(name_1,array_1,arr_1),(name_2,array_2,arr_2),...,(name_n,array_n,arr_n)]
有沒有比用兩個指標迭代更有效的解決方案?
uj5u.com熱心網友回復:
sorted_a = sorted(a, key=lambda x: x[0])
sorted_b = sorted(b, key=lambda x: x[0])
combined = [(sorted_a[idx][0], sorted_a[idx][1], sorted_b[idx][1]) for idx in range(len(a))]
uj5u.com熱心網友回復:
我假設這兩個串列具有相同數量的元素并且名稱的順序相同(從您的示例中看起來)。在這種情況下
[(x[0], x[1], y[1]) for x, y in zip(a, b)]
uj5u.com熱心網友回復:
既然你說它們是成對的,那么這里的大多數答案都很好,你只需要在將它們連接在一起之前對元組中的第一項進行排序。
[(x[0], x[1], y[1]) for x, y in zip(sorted(a, key=lambda x: x[0]),
sorted(b, key=lambda x: x[0]))]
uj5u.com熱心網友回復:
避免排序的解決方案是通過字典:
names = [x[0] for x in a]
ad = dict(a)
bd = dict(b)
combined = list({k: [ad[k], bd[k]] for k in names}.items())
在我的機器,用載體a和b尺寸1000的,這個排序兩個陣列時,需要384美元兌667我們。注意:最終combined串列未排序。
uj5u.com熱心網友回復:
和 pandas
list(pd.concat([pd.DataFrame(a).set_index(0) for x in (a , b)],axis=1).reset_index().itertuples(index=False,name=None))
[('name_1', 'array_1', 'array_1'), ('name_2', 'array_2', 'array_2')]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/351728.html
上一篇:Python中的HTTPGET
