【问题标题】:How can I sort a list in python 3 with priority given to specific values?如何对 python 3 中的列表进行排序,优先考虑特定值?
【发布时间】:2020-05-05 23:14:28
【问题描述】:

我有一个名为 V 的列表。V 的元素将是以下之一:0,1,2 或 +inf

我想对此列表进行排序,使 2 始终位于开头,并且从那时起列表按升序排序。

例如,如果列表最初是 V = [0,1,2,inf] 然后它应该变成 V = [2,0,1,inf]

我很清楚如何使用条件语句执行此操作并附加到新列表中,但如果可能的话,我想使用键或理解对其进行排序。

我是用 Python3 写的,但我不想导入任何东西

【问题讨论】:

    标签: python-3.x sorting list-comprehension priority-queue


    【解决方案1】:

    使用 lambda 创建一个元组并测试第一个元素是否是首选值之一:

    >>> V = [0,1,2,float('inf')] 
    >>> sorted(V, key=lambda e: (e!=2, e))
    [2, 0, 1, inf]
    

    所以元组将是(True, the_value)(False, the_value) 之一。 False True 并且它胜过元组中的第二个实际值。

    如果您有多个首选值,则可以将in 与一组首选值一起使用:

    >>> sorted(V, key=lambda e: (e not in (1,2), e))
    [1, 2, 0, inf]
    >>> sorted(V, key=lambda e: (e not in (2,0), e))
    [0, 2, 1, inf]
    

    你也可以创建一个理解:

    >>> [(e not in (0,2),e) for e in V]
    [(False, 0), (True, 1), (False, 2), (True, inf)]
    

    然后排序:

    >>> [t[1] for t in sorted((e not in (0,2),e) for e in V)]
    [0, 2, 1, inf]
    

    这是Decorate, Sort, Undecorate的一种形式

    【讨论】:

      猜你喜欢
      • 2021-07-30
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2020-01-16
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多