找暑期实习的时候做到某厂的笔试题里面用到这个,就总结一下。。。
1. bisect_left(a, x, lo=0, hi=len(a))
- 功能:在已排序序列 a 中查找元素 x 应该插入的位置,并返回最左侧的插入位置(index啊)。
- 区别:如果有多个相同元素,
bisect_left
返回最左侧的插入位置。 - 默认情况下,查找范围是整个序列 a,但可以通过 lo 和 hi 参数来限制查找范围。
2. bisect_right(a, x, lo=0, hi=len(a))
- 功能:在已排序序列 a 中查找元素 x 应该插入的位置,并返回最右侧的插入位置。
- 区别:如果有多个相同元素,
bisect_right
返回最右侧的插入位置。 - 默认情况下,查找范围是整个序列 a,但可以通过 lo 和 hi 参数来限制查找范围。
3. insort(a, x, lo=0, hi=len(a))
- 功能:将元素 x 插入到序列 a 中,使得插入后的序列 a 仍然有序。
- 插入位置由 x 应该插入以保持序列有序的位置决定,这通常是
bisect_left()
返回的索引。 - 可以通过 lo 和 hi 参数来限制查找范围。
4. insort_right(a, x, lo=0, hi=len(a))
- 类似于
insort()
,但是插入位置由 x 应该插入以保持序列有序的最后一个位置决定,这通常是bisect_right()
返回的索引。 - 在处理降序排序的序列时特别有用。
区别 bisect_left() 和 bisect_right()
在对于相同元素的处理的时候,bisect_left() 返回最左侧的插入位置,bisect_right() 返回最右侧的插入位置。
比如我现在要插入元素2:
总结
bisect_left()
和 bisect_right()
主要用于查找操作,返回的是插入位置的索引,其中 bisect_left()
返回第一个插入位置,而 bisect_right()
返回最后一个插入位置。insort()
和 insort_right()
用于实际插入元素,insort()
在序列中插入元素时使用 bisect_left()
的返回值,而 insort_right()
使用 bisect_right()
的返回值。