如何对 python 3 中的列表进行排序,优先考虑特定值?
Posted
技术标签:
【中文标题】如何对 python 3 中的列表进行排序,优先考虑特定值?【英文标题】:How can I sort a list in python 3 with priority given to specific values? 【发布时间】:2020-05-05 23:14:28 【问题描述】:我有一个名为 V 的列表。V 的元素将是以下之一:0,1,2 或 +inf
我想对此列表进行排序,使 2 始终位于开头,并且从那时起列表按升序排序。
例如,如果列表最初是 V = [0,1,2,inf] 然后它应该变成 V = [2,0,1,inf]
我很清楚如何使用条件语句执行此操作并附加到新列表中,但如果可能的话,我想使用键或理解对其进行排序。
我是用 Python3 写的,但我不想导入任何东西
【问题讨论】:
【参考方案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的一种形式
【讨论】:
以上是关于如何对 python 3 中的列表进行排序,优先考虑特定值?的主要内容,如果未能解决你的问题,请参考以下文章