我们假设我有一份日期清单:
mydates = [Timestamp('2017-03-31 00:00:00'),
Timestamp('2017-06-30 00:00:00')
Timestamp('2017-09-30 00:00:00'),
Timestamp('2017-12-31 00:00:00'),
Timestamp('2018-03-31 00:00:00')]
我得到一个新约会,想知道插入它的位置。如果日期已经在列表中,我们假设我们将再次将其插入现有日期的右侧。
即,'2016-12-10'
将插入位置0,左侧插入Timestamp('2017-03-31 00:00:00')
等。
答案 0 :(得分:2)
一般来说,找到位置的最佳方法是对数搜索。但细节取决于你拥有的东西。
另外,请注意,即使您将搜索从线性时间改进为对数,如果您使用的数据结构如partition
或list
,array
仍然会继续采取线性时间(因为它必须移动列表的其余部分)。所以你可能正在优化错误的东西。
insert
,您最好只使用线性搜索。list
或set.add
收集所有内容,然后{ {1}}它在阶段结束时。这仍然是有效(摊销)的日志时间,但具有更好的乘数。list.append
或其他普通sort
,请使用stdlib中的bisect
。 list
,或者像pandas Sequence
一样构建在它上面的东西:使用numpy的searchsorted
。 (如果你要存储一堆Pandas array
对象,你可能应该使用其中一个数据结构而不是Series
,如果你还没有。)blist
之类的东西是一个很好的起点。答案 1 :(得分:1)
如果您有排序列表,则可以插入新日期并对结果进行排序。您也可以使用bisect。