在插入数字时,我使用二分模块来保持列表的排序。假设我将在这个顺序中插入三个数字9, 2, 5。这个列表的最后一个状态显然是[2, 5, 9],但是,我是否有可能找到将数字插入到这个列表中的索引列表。对于这个列表,它将是[1, 2, 0]。所以我需要的列表是排序发生后的索引0,1,2,这是在每次插入时发生的,这就是为什么我找不到一种方法。我可以根据key函数的sorted特性对其进行排序,但是我不想增加复杂性。那么,我的问题是,这是可以实现的二分模块吗?
这是我使用的代码,
import bisect
lst = []
bisect.insort(lst, 9)
bisect.insort(lst, 2)
bisect.insort(lst, 5)
print lst编辑:另一个例子是,我要将数字4、7、1、2、9插入到某个空列表中。(让我们先假设没有二分,我已经有了列表中的数字)
[4, 7, 1, 2, 9]
# indexes [0, 1, 2, 3, 4], typical enumeration分拣后,
[1, 2, 4, 7, 9]
# now the index list [2, 3, 0, 1, 4]它能在不增加复杂性的情况下用平分的方法来完成吗?
注:插入的顺序不是任意的。众所周知,这就是为什么我尝试使用带二分的索引。
发布于 2016-06-27 21:02:50
insort不知道按什么顺序插入项目。你得自己加上这个逻辑。这样做的一种方法可以是插入由值和索引组成的二元组:
bisect.insort(lst, (9, 0))
bisect.insort(lst, (2, 1))
bisect.insort(lst, (5, 2))在添加对象时,您需要自己跟踪索引,但由于序列首先按第一项排序,然后按下一项排序,所以这将仍然是正确排序的,而无需付出任何额外的努力。
https://stackoverflow.com/questions/38061553
复制相似问题