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]
我有一些列表,其项目是数字或 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]