Python 如何找到一个索引,在该索引处可以将新项插入到已排序的列表中并保持其排序?

Python 如何找到一个索引,在该索引处可以将新项插入到已排序的列表中并保持其排序?,python,sortedlist,Python,Sortedlist,我想知道a应该在有序列表b中的第6位 最具蟒蛇式的方法是什么?使用。它不是最漂亮的API,但它正是您所需要的 您需要使用bisect.bisect,它返回您想要的内容。是Python标准库中的一个模块,非常适合此任务。模块bisect中的函数bisect将为您提供值的插入点索引 让我举一个bisect a = 132 b = [0, 10, 30, 60, 100, 150, 210, 280, 340, 480, 530] 结果将是5,因为列表是以0为基础的,所以实际上它是第6位 您可以知

我想知道
a
应该在有序列表
b
中的第6位

最具蟒蛇式的方法是什么?

使用。它不是最漂亮的API,但它正是您所需要的

您需要使用
bisect.bisect
,它返回您想要的内容。

是Python标准库中的一个模块,非常适合此任务。模块
bisect
中的函数
bisect
将为您提供值的插入点索引

让我举一个
bisect

a = 132

b = [0, 10, 30, 60, 100, 150, 210, 280, 340, 480, 530]
结果将是
5
,因为列表是以0为基础的,所以实际上它是第6位

您可以知道的是将结果用于
插入

from bisect import bisect
a = 132
b = [0, 10, 30, 60, 100, 150, 210, 280, 340, 480, 530]
print(bisect(b, a))
或者不使用中间变量

index = bisect(b, a)
b.insert(index, a)

现在
b
将是
[0、10、30、60、100、132、150、210、280、340、480、530]

对边缘情况还有进一步的关注。例如,假设您要选择上述
b
(a,c)
范围内的元素,并使用

b.insert(bisect(b, a), a)
然后您需要考虑这样一种情况,
a,c
实际上是
b
的元素。注意

b[idx_a:idx_c]
两者都将给出索引2。因此,如果
a=10
,我们需要将该指数降低1。幸运的是,有一个函数
bisect.bisect\u left
正是这样做的,即在我们的示例中

bisect.bisect(b, 10)
bisect.bisect(b, 11)
给1


总的来说,应该使用
bisect.bisect\u left()
和右索引
bisect.bisect\u right()
(与
bisect.bisect()
)计算左索引。

a
将在
b
中实际处于第6位,而不是第4位。正如@madjar所指出的,使用了
bisect
模块
bisect.bisect(b,a)
获取位置(或
bisect[左|右]
)并插入
bisect.insort(b,a)
insort[左|右]
。为什么它“不是最漂亮的API”?如果a是对象或字典,而b是对象或字典的排序列表呢?
bisect.bisect_left(b, 10)