我正在使用bisect模块在插入数字时对列表进行排序。
假设我要按此顺序插入三个数字9, 2, 5
。
此列表的最后一个状态显然是[2, 5, 9]
,但是,我是否有机会找到将数字插入此列表的索引列表。对于此列表,它将是[1, 2, 0]
。所以我需要的列表是排序发生之后的索引[0,1,2],在每次插入时都会发生二等分,这就是为什么我找不到方法。我可以使用key
函数的sorted
功能对其进行排序,但我不想增加复杂性。所以我的问题是这可以通过bisect模块实现吗?
这是我使用的代码,
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]
可以在不增加复杂性的情况下使用bisect完成。
注意:插入的顺序不是任意的。众所周知,这就是为什么我尝试使用带有bisect的索引。
答案 0 :(得分:0)
insort
不知道项目的插入顺序。你必须自己添加这个逻辑。一种方法是插入由值和索引组成的2元组:
bisect.insort(lst, (9, 0))
bisect.insort(lst, (2, 1))
bisect.insort(lst, (5, 2))
当您添加对象时,您需要自己跟踪索引,但由于序列首先按第一项排序,然后按下一项等排序,所以仍然可以正确排序而无需任何额外的工作。< / p>