Python:有时根据第一个元素,有时根据第二个元素对2元组进行排序

时间:2018-08-29 08:54:03

标签: python-3.x sorting max

我有一个整数[(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>()

并具有最佳运行时复杂度类别中的两种排序策略,以及两个数字之间的必要连接。


  • 当我需要根据第一个元组对它进行排序时,我需要访问整个列表(因为我需要计算累计和以及其他操作)
  • 当我需要根据第二个元素进行排序时,我只对最小的元素感兴趣,然后通常会删除这些相应的元组。
  • 通常在插入后会根据第一个元素请求新的排序。

2 个答案:

答案 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)。并非最佳。