【问题标题】:How to sort two lists based on one first and the other next in Python?python - 如何在Python中基于一个第一个和另一个下一个对两个列表进行排序?
【发布时间】:2020-12-24 10:17:14
【问题描述】:

如果要对两个列表进行并行排序,首先按一个列表排序,然后对于具有相同值的元素,再按第二个列表排序?任何一个列表都可能有重复的元素。

list_a = [3,2,4,4,5]
list_b = ['d','b','a','c','b']

输出需要基于(1)list_a中的值从大到小,以及(2)list_a中具有相同值的元素,在list_b中按字母顺序排序。

list_a = [5,4,4,3,2]
list_b = ['b','a','c','d','b']

有什么想法吗?

【问题讨论】:

    标签: python python-3.x sorting


    【解决方案1】:

    配对、排序、取消配对、回写:

    list_a[:], list_b[:] = zip(*sorted(zip(list_a, list_b), key=lambda p: (-p[0], p[1])))
    

    回写可以保持简短,并对现有列表对象进行排序,而不是使用单独的新对象。

    更垂直的版本,可能更好:

    pairs = list(zip(list_a, list_b))
    pairs.sort(key=lambda p: (-p[0], p[1]))
    list_a[:], list_b[:] = zip(*pairs)
    

    【讨论】:

    • 效果很好。我仍在尝试理解 lambda 部分。 p[0] 是否引用 list_a 而 p[1] 是否引用 list_b? p[0] 前面的负号是什么意思?谢谢!
    • 是的,p 是一对带有 list_a 元素和对应的 list_b 元素的对。否定实现降序。
    猜你喜欢
    • 2016-08-03
    • 2020-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多