首页 > 解决方案 > Python 3 中 bisect.insort 的奇怪行为

问题描述

Python 3.8.2在 linux 机器上,如果我创建一个list并使用insort它,我会得到预期的结果;另一方面,如果我在调用之前颠倒容器中元素的顺序insort发生

>>> a = list(range(10))
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> a.reverse()
>>> a
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
>>> bisect.insort(a,6)
>>> a
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 6]

我期待[9, 8, 7, 6, 6, 5, 4, 3, 2, 1, 0]的不是那样。

为什么会产生这个结果?

标签: pythonsortinginsertionbisection

解决方案


来自文档

该模块支持以排序 顺序维护列表,而无需在每次插入后对列表进行排序。

也来自文档:

与 sorted() 函数不同,bisect() 函数具有键或反转参数是没有意义的,因为这会导致设计效率低下(对 bisect 函数的连续调用不会“记住”所有先前的键查找) .


推荐阅读