Python 从大的元组排序列表中获取一系列项

Python 从大的元组排序列表中获取一系列项,python,list,search,tuples,Python,List,Search,Tuples,我有一个元组列表,如下所示: [(334.99972431901307, 0.0), (335.00088248902574, 0.0), (335.0020406650446, 0.0), (335.0031988470696, 66.83868408203125), (335.00435703510072, 252.91905212402344), (335.0055152291381, 341.447509765625), (335.00667342918183, 282.19641113

我有一个元组列表,如下所示:

[(334.99972431901307, 0.0), (335.00088248902574, 0.0), (335.0020406650446, 0.0), (335.0031988470696, 66.83868408203125), (335.00435703510072, 252.91905212402344), (335.0055152291381, 341.447509765625), (335.00667342918183, 282.1964111328125), (335.0078316352317, 125.92335510253906), (335.00898996725408, 0.0), (335.01014818531672, 0.0)]
def getSpectra_mzWindow(self, mzStart, mzEnd):
    for spectrum in self.mzmlInstance:
        # loop through all the peaks
        for peak in spectrum.peaks:
            # it's ordered, so when peak[0] > mzEnd it can stop
            if float(peak[0]) > mzEnd:
                break
            if mzStart <= float(peak[0]) <= mzEnd:
                yield spectrum, peak
该列表的长度为16665,按每个元组的第一个元素排序。我想根据第一个元组值从列表中提取一定范围的元组。目前我是这样做的:

[(334.99972431901307, 0.0), (335.00088248902574, 0.0), (335.0020406650446, 0.0), (335.0031988470696, 66.83868408203125), (335.00435703510072, 252.91905212402344), (335.0055152291381, 341.447509765625), (335.00667342918183, 282.1964111328125), (335.0078316352317, 125.92335510253906), (335.00898996725408, 0.0), (335.01014818531672, 0.0)]
def getSpectra_mzWindow(self, mzStart, mzEnd):
    for spectrum in self.mzmlInstance:
        # loop through all the peaks
        for peak in spectrum.peaks:
            # it's ordered, so when peak[0] > mzEnd it can stop
            if float(peak[0]) > mzEnd:
                break
            if mzStart <= float(peak[0]) <= mzEnd:
                yield spectrum, peak

然而,这是难以置信的缓慢。因为我知道它是按第一个值排序的,有没有比循环遍历整个列表更快的方法呢?我正在考虑实施二进制搜索,但是否已经有一个库对排序元组列表进行了优化?

该模块应该能够根据您的目的调整这些示例:。不必在每个函数中检索值,您可以返回索引,然后使用这两个索引提取您的范围。

然后我是否仍然需要循环遍历列表,将元组的所有第一个值放入列表以获取索引,返回元组列表以获取正确的元组?@NiekdeKlein,您可能可以搜索一个元组,如mzStart,0.0