gpt4 book ai didi

python - 使用两个列表排序产生的排序对第三个列表进行排序?

转载 作者:行者123 更新时间:2023-12-01 21:23:44 24 4
gpt4 key购买 nike

假设我有三个列表:

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Z = [ 5, 2, 3, 1, 4, 9, 6, 0, 7]

我可以很容易地根据 Y 对 X 进行排序:

XY_sort = [x for _,x in sorted(zip(Y,X))]
print(XY_sort) # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]

当我想根据生成 XY_sort 的排序对列表 Z 进行排序时,就会产生疑问。理想情况下,我想结束:

Z_sort = [5,   1,   0,   2,   3,   4,   7,   9,   6]

我猜最好的方法是在 X 排序到 XY_sort 时以某种方式存储 X 的排序索引,然后使用它们对 Z 排序,但我不知道我将如何去做.任何帮助将不胜感激!

最佳答案

你可以用同样的方式排序。它将首先按 Y 排序,然后按 X 排序,如果它们相同,它将按 Z 排序:

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Z = [ 5, 2, 3, 1, 4, 9, 6, 0, 7]


XYZ_sort = [z for y,x,z in sorted(zip(Y,X,Z))]
# [5, 1, 0, 2, 3, 4, 7, 9, 6]

[编辑感谢评论者的坚韧]
如果 X-Y 组合可能不是唯一的,并且在这些情况下保持 Z 的相对顺序很重要,则可以传递 operator.itemgetter()作为干净解决方案排序的关键:

from operator import itemgetter

X = ["a", "b", "c", "a", "d", "e", "f", "g", "h", "i", "a"]
Y = [ 0, 1, 1, 0, 0, 1, 2, 2, 0, 1, 0]
Z = [ 5, 2, 3, -1, 1, 4, 9, 6, 0, 7, 1]

XYZ_sort = [z for y,x,z in sorted(zip(Y,X,Z), key=itemgetter(0, 1))]

#preseves the relative order of 5, -1, and 1
# [5, -1, 1, 1, 0, 2, 3, 4, 7, 9, 6]

关于python - 使用两个列表排序产生的排序对第三个列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63430193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com