小编典典

根据另一个列表中的值对列表进行排序

all

我有一个这样的字符串列表:

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0,   1,   1,   0,   1,   2,   2,   0,   1 ]

使用 Y 中的值对 X 进行排序以获得以下输出的最短方法是什么?

["a", "d", "h", "b", "c", "e", "i", "f", "g"]

具有相同“键”的元素的顺序无关紧要。我可以求助于使用for构造,但我很好奇是否有更短的方法。有什么建议?


阅读 189

收藏
2022-03-11

共1个答案

小编典典

最短代码

[x for _, x in sorted(zip(Y, X))]

例子:

X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"]
Y = [ 0,   1,   1,    0,   1,   2,   2,   0,   1]

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

通常来说,一般来说

[x for _, x in sorted(zip(Y, X), key=lambda pair: pair[0])]

解释:

  1. zip两个lists
  2. 创建一个新的,list根据zipusing排序sorted()
  3. 使用列表推导从排序的 zipped 中 提取 每对的第一个元素list

有关如何设置\使用key参数以及sorted一般功能的更多信息,请查看this


2022-03-11