Python排序none忽略(或稳定)

Python sort none ignore (or stable)

我有一些列表,其项目是数字或 None

我想对它们进行排序,以便 None 项保持在同一位置,同时对数值进行排序。

例如,我想要这个列表:

[None, None, 20, None, 10]

待分类:

[None, None, 10, None, 20]

还有这个:

[None, 50, 20, None, None]

进入:

[None, 20, 50, None, None]

您可以这样获得您的稳定排序:

  • 首先对不是None
  • 的值进行排序
  • 然后创建输出列表:
    • 如果原始列表项是None,输出项是None
    • 如果它是一个数值,我们取排序列表中的下一个值

通过在其上创建一个迭代器,然后对其调用 next,可以轻松地从排序列表中获取下一个值。


def stable_sort(lst):
    sorted_values = sorted([value for value in lst if value is not None])
    it_sorted = iter(sorted_values)
    out = []
    for value in lst:
        out.append(None if value is None else next(it_sorted))
    return out

print(stable_sort([None, None, 20, None, 10]))
# [None, None, 10, None, 20]

print(stable_sort([None, 50, 20, None, None]))
# [None, 20, 50, None, None]