Sorting 如何有效地对iterable的第一项进行排序?

Sorting 如何有效地对iterable的第一项进行排序?,sorting,python-3.x,Sorting,Python 3.x,我使用的是一个包含大量数据的大结构:一个“表”对象。它有一些基本的功能,比如可移植性。它迭代所有具有.get\u norm()方法的项集合。为此,它使用两个索引器:rank\u indexer和i\u rank\u indexer。要获取项目编号i,我基本上会调用self.content[self.i\u rank\u indexer[i]]。这两个索引器彼此相反,我必须让它们保持这种状态 我想要的是能够获得存储在self.content中的15000个项目中的前300个项目。目前,我正在做以下

我使用的是一个包含大量数据的大结构:一个“表”对象。它有一些基本的功能,比如可移植性。它迭代所有具有
.get\u norm()
方法的项集合。为此,它使用两个索引器:
rank\u indexer
i\u rank\u indexer
。要获取项目编号i,我基本上会调用
self.content[self.i\u rank\u indexer[i]]
。这两个索引器彼此相反,我必须让它们保持这种状态

我想要的是能够获得存储在self.content中的15000个项目中的前300个项目。目前,我正在做以下工作:

def sort(self):
        scta = [0-self.content[self.i_rank_indexer[r]].get_norm() for r in range(self.cardinal)]
        npa = np.argsort(scta)
        self.i_rank_indexer = {x:self.i_rank_indexer[npa[x]] for x in range(len(npa))}
        self.rank_indexer = {self.i_rank_indexer[key]:key for key in self.i_rank_indexer}

问题是,通过这样做,我对15000长度的数组进行排序,这比我需要的要复杂得多(提取前300个元素)。最有效的方法是什么?我不需要保留秩索引器系统,但我必须保留从元素的秩访问元素的方法。

使用内置的15000个元素可能比任何显式循环方法更有效地获得最佳300。是的,我希望内置方法获得最佳300,如果可能的话,使用内置方法进行排序已经非常快了,我不确定是否有足够的动机来编写代码以获得类似前300名的结果。在Python中,获得前300名的最有效方法很有可能是首先对整个列表进行排序。除非这是一个瓶颈,否则我不认为有太多的动机去担心它。15000件物品并不意味着内存问题。如果这是一个问题,您可以在中实现一些算法:对我来说这需要几分钟,这里没有什么“非常快”。稍后我可能需要15000个以上的项目。几分钟来排序15000个元素?您的代码中肯定还有其他问题。我无法想象这是排序的瓶颈。使用15000个元素的内置排序可能比任何显式循环方法更有效地获得最佳300。是的,如果可能的话,我希望使用内置方法获得最佳300。使用内置方法进行排序已经非常快,我不确定是否有足够的动机来编写代码以获得前300名。在Python中,获得前300名的最有效方法很有可能是首先对整个列表进行排序。除非这是一个瓶颈,否则我不认为有太多的动机去担心它。15000件物品并不意味着内存问题。如果这是一个问题,您可以在中实现一些算法:对我来说这需要几分钟,这里没有什么“非常快”。稍后我可能需要15000个以上的项目。几分钟来排序15000个元素?您的代码中肯定还有其他问题。我无法想象是分拣造成了瓶颈。