簡體   English   中英

通過另一個排序的枚舉列表重新排列元組列表

[英]Rearrange list of tuples by another sorted enumerated list

我有一個元組列表: a = [(10, 11), (5, 5), (2, 3), (6, 7), (8, 3), (9, 2)]和一個簡單的列表值b = [10, 9, 10, 2, 8, 3] 然后我列舉第二個列表並出於某些目的對其進行排序。

b_enumerated = list(enumerate(b))
# [(0, 10), (1, 9), (2, 10), (3, 2), (4, 8), (5, 3)]
b_sorted = sorted(b_enumerated, key=lambda x: x[1], reverse=True)
# [(0, 10), (2, 10), (1, 9), (4, 8), (5, 3), (3, 2)]

現在我想根據第二個排序列表重新排列我的第一個列表,所以我希望得到[(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)] (原始列表的元組按有序列表的索引順序:0, 2, 1, 4, 5, 3),例如,我枚舉的第一個列表是[(0, (10, 11)), (1, (5, 5)), (2, (2, 3)), (3, (6, 7)), (4, (8, 3)), (5, (9, 2))]

我怎樣才能達到預期的效果? 也許我需要使用某種索引,因為對壓縮列表進行排序沒有幫助。

謝謝。

如果目的是使用b a排序,則無需枚舉b並對枚舉的序列進行排序以首先構建b_sorted的中間列表。

相反,您可以 zip b使用a進行排序,然后 output 僅在結果元組序列中的第二項:

[t for _, t in sorted(zip(b, a), reverse=True)]

這將返回:

[(10, 11), (2, 3), (5, 5), (8, 3), (9, 2), (6, 7)]

快速回答

a_sorted =  [a[i[0]] for i in b_sorted]

簡要說明

您基本上是在說“將a[0]發送到a_sorted[0] ,將a[1]發送到a_sorted[2] ... 將a[i]發送到a_sorted[b_sorted[i][0]] ”。

這可以通過代碼完成

a_sorted =  [a[b_sorted[i][0]] for i in range(len(b_sorted))]

它工作正常,但可以通過迭代b_sorted來縮短和整理。

a_sorted =  [a[i[0]] for i in b_sorted]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM