簡體   English   中英

如何按照與 Python 中另一個列表相同的順序對列表進行排序?

[英]How do I sort a list in the same order as another list in Python?

假設我有兩個列表,第一個代表總體積,第二個代表各自的唯一項目 ID,其數量等於總體積:

a = [50, 45, 90, 75]

b = [[1,2,3], [5,6,7], [4], [8,9]]

例如,50 是 ID 為 1,2 和 3 的項目的總體積。

我目前正在將列表a從小到大排序,但我也想安排列表b的順序以匹配其總容量。 根據之前制作的列表,我希望兩個列表都按如下方式排序:

a = [45, 50, 75, 90]

b = [[5,6,7], [1,2,3], [8,9], [4]]

要對列表a進行排序,我正在寫:

a.sort(key=lambda x: x, reverse = False)

但我不確定在 Python 中為列表b編寫代碼以基於相同的模式進行排序。 我必須保持相同的數據結構,所以列表ab必須分別保持列表和列表的列表。

你可以將兩個列表放在一起 zip,根據a值對元組進行排序,然后解壓:

a = [45, 50, 75, 90]
b = [[5,6,7], [1,2,3], [8,9], [4]]

a,b = map(list, zip(*sorted(zip(a, b), key = lambda x: x[0])))

print(a, b, sep='\n')

Output:

[45, 50, 75, 90]
[[5, 6, 7], [1, 2, 3], [8, 9], [4]]

您可以使用zip()和兩個列表理解:

a = [50, 45, 90, 75]
b = [[1,2,3], [5,6,7], [4], [8,9]]

a = [x for x, _ in sorted(zip(a, b))]
b = [y for _, y in sorted(zip(a, b))]
print(a)
print(b)

這輸出:

[45, 50, 75, 90]
[[5, 6, 7], [1, 2, 3], [8, 9], [4]]

暫無
暫無

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

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