python - Python排序无忽略(或稳定)
问题描述
我有列表,其项目要么是数字,要么是None
.
我想对它们进行排序,以便None
项目保持在同一个位置,同时对数值进行排序。
例如,我想要这个列表:
[None, None, 20, None, 10]
被分类为:
[None, None, 10, None, 20]
和这个:
[None, 50, 20, None, None]
进入:
[None, 20, 50, 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]
推荐阅读
- html - 在没有额外 CSS 的情况下对齐列表项(引导程序)
- reactjs - 检查 ForwardRef 的渲染方法
- image - `plt.imshow` 只显示最后一张图片?
- javascript - 带有 vuex 的 Vue 中的不受信任的数据
- c++ - 在 QTreeview 特定单元格中添加 QCombobox
- node.js - 将图像从 rest 端点保存到 firebase 存储不起作用,但可以从前端工作
- crystal-reports - 始终使用德语 - 日期字段中的 MMM 格式
- php - 在 WooCommerce 上全局禁止延期交货产品选项(也在管理员中)
- java - 在所有内容都设置为公开时解决访问错误
- email - 使用 PAC 文件绕过 SMTP/IMAP 代理流量