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

发布于 2021-02-02 23:22:44

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

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结构的使用,但我好奇是否有更短的方法。有什么建议么?

关注者
0
被浏览
131
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    最短代码

    [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])]
    

    解释:

    • zip两个list
    • 创建一个新的,list基于zip使用排序sorted()。
    • 使用列表推导从排序的,压缩的中提取每对的第一个元素list。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看