我有一个整数[(2,10), [...] (4,11),(3,9)]
元组列表。
元组会定期添加到列表中以及从列表中删除。最多包含约5000个元素。
在我的代码中,我需要使用此列表,该列表有时根据第一个,第二个元组元素进行排序。因此,列表的顺序将发生巨大变化。度假村可能随时发生。
仅当列表已被大量排序时,Python排序才快速。因此,这种频繁采用的一般方法可能效率不高。更好的方法是使用两个自然排序的数据结构,例如SortedList。但是在这里,我需要两个列表(一个用于第一个元组元素,一个用于第二个元组),以及一个字典来创建上述元组的映射。
解决此问题的Python方法是什么?
在Java中,我会这样:
TreeSet<Integer> leftTupleEntry = new Treeset<Integer>();
TreeSet<Integer> rightTupleEntry = new Treeset<Integer>();
Hashmap<Integer, Integer> tupleMap = new HashMap<Integer,Integer>()
并具有最佳运行时复杂度类别中的两种排序策略,以及两个数字之间的必要连接。
答案 0 :(得分:0)
first_element_list = sorted([i[0] for i in list_tuple])
second_element_list = sorted([i[1] for i in list_tuple])
答案 1 :(得分:0)
我做了什么:
我使用SortedKeyList并根据第一个元组元素进行排序。将O(log(n))插入到此列表中。从中读取也是O(log(n))。
from operator import itemgetter
from sortedcontainers import SortedKeyList
self.list = SortedKeyList(key=itemgetter(0))
self.list.add((1,4))
self.list.add((2,6))
当我根据我使用的第二个元组元素需要argmin
时
np.argmin(self.list, axis=0)[0]
哪个是O(n)。并非最佳。