我有一组自定义对象,我将其添加到列表中,然后使用自定义比较器进行排序。然后,我有一个这些对象的某个子集的第二个列表,我需要在第一个列表中的索引,以便我可以找到相等的对象(由我的比较器定义)。在对列表进行排序时,这些对象应该只是该对象之前或之后的对象,但我事先并不知道有多少对象(可能是2-3)。
我需要这个查找处于不变的时间,因为我的排序对象列表会非常大。我显然可以使用list.index(),但那将是O(N),我想我可以做得更好。我的第一个想法是使用双向链表,但看起来我需要自己实现,我不确定如何对它进行排序。
python中是否有双链表实现?或者有更好的替代方案吗?另外,我目前使用的是python2.5并且无法更新我的版本,但如果我受到我的版本的限制,我仍然有兴趣了解该解决方案。
答案 0 :(得分:1)
对于额外O(N)存储的价格,您可以创建一个字典来支持已排序列表的列表索引:
index_map = dict((e,i) for (i,e) in enumerate(sorted_list))
这将为您提供O(1)查找第二个列表中项目的位置。
如果sorted_list
的元素是自定义对象,那么,正如@mseifert指出的那样,这种方法依赖于正确定义__eq__
的对象,并且还可以进行清理。