排序思想之辅助列


曾经在使用 Excel 的时候,经常会遇到排序的需求。

无论是自己使用,还是同事朋友求助,我都会根据情况推荐利用辅助列。

其中一个常见的需求自然就是:排序并处理完数据后,需要还原原始行顺序。

我们很多时候是只想到基于当前已有数据进行操作,这难免就限制了我们的思维广度。如果在理解了 Excel 的核心就是数据,它这种数据的核心就是行和列这种思维之后,操作数据的时候,思维就容易很多。

比如这个要还原原始行顺序,那么首先就想到应该有一列数据可以帮助我们完成此任务,那么,如果没有此列,就增加此列,输入 1 回车、2 回车,选中两单元格,鼠标放第二单元格右下角变黑色实心十字,双击或下拉拖动就能快速得到一列从 1 到 N 的数字列,它,就代表了我们数据行的原始顺序,此后无论你怎么排序或移动或删除,都能通过它来快速还原原始顺序,根本无需担心数据被搞得乱糟糟的。

这便是辅助列思想的一个实践,它也不仅仅在还原数据顺序有帮助,甚至在操作排序的过程中也提供了一定的帮助。

以前我在 Excel 中排序自然不会去刻意讲究什么【排序稳定性】,除非当多条件排序有特别需求,但是这在编程领域却是一条基础保证,如果排序不稳定,那么就无法保证相同值的原始顺序不会发生改变,就与我们人类正常理解的排序存在差异,影响正常数据处理。

辅助列思想我自己曾经经常使用,也有机会就会给人演示操作并说明增加此列数据的好处。虽然一些讲 Excel 的书也有特别提到序号列并不建议保留,因为表格有行号就可以看到,但是我认为,行号是行号,它是表格软件的一部分,而序号列却是数据的一部分,它在诸多情形下为我们提供了数据服务,所以我的建议是如果有需要,就尽量提供,方便后续进行一些操作。

辅助列的思维在我曾经的很多场合都会用到,基本上拿到数据首先就会考虑是否需要加入辅助列,不过这次再次想到要提一下,是因为再次在看 Python 的 list 排序这部分文档的时候,有人提到 “装饰-排序-去装饰” 的排序方法,看了下,这就是辅助字段排序啊,跟曾经 Excel 中的辅助列排序,何其相似!

不过 Python 已经提供了更优雅的排序函数写法,且默认就是【排序稳定】的,辅助字段排序方法仅仅作为参考学习的例子,仅此而已。

而结合来看,其思维方式很有参考价值。