如何对 python 3 中的列表进行排序,并优先考虑特定值?
How can I sort a list in python 3 with priority given to specific values?
我有一个名为 V 的列表。V 的元素将是以下之一:0,1,2 或 +inf
我想对这个列表进行排序,使 2 始终在开头,并且从那时起列表按升序排序。
例如,如果列表最初是 V = [0,1,2,inf]
然后它应该变成 V = [2,0,1,inf]
我很清楚如何使用条件语句执行此操作并将其附加到新列表中,但如果可能的话,我想使用键或理解对其进行排序。
我在 Python3 中写这篇文章,但我不想导入任何东西
使用 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]
的一种形式
我有一个名为 V 的列表。V 的元素将是以下之一:0,1,2 或 +inf
我想对这个列表进行排序,使 2 始终在开头,并且从那时起列表按升序排序。
例如,如果列表最初是 V = [0,1,2,inf] 然后它应该变成 V = [2,0,1,inf]
我很清楚如何使用条件语句执行此操作并将其附加到新列表中,但如果可能的话,我想使用键或理解对其进行排序。
我在 Python3 中写这篇文章,但我不想导入任何东西
使用 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]
的一种形式