繁体   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