首页 > 解决方案 > 在 Python 中创建自定义迭代器以在大型数据集中搜索子列表

问题描述

我正在学习/实验 Python 中的迭代器/生成器,以创建一个快速搜索函数,该函数可以同时从前到后和从后到前搜索大型数据集的子集。我创建了一个搜索类,我打算线程化它的实例,以便它们并行执行搜索。我试图了解生成器的有用性,并想知道这是否是它们实际上有用的情况。按照我的设置方式,数据集仍必须加载到内存中。有没有办法做到这一点,整个数据集不必存储在变量中。任何关于我对这个想法的方法的指导将不胜感激!

class Search:

    def __init__(self, dataset):
        self.data = dataset
        self.index = 0
        self.end = len(dataset) - 1

    def __iter__(self):
        while self.index <= self.end:
            yield self.index
            self.index += 1

    def __reversed__(self):
        i = self.end
        while i >= self.index:
            yield i
            i -= 1

    def search(self, subset, reverse=False):
        switch = (iter(self), reversed(self)) 
        for index in switch[reverse]:
            if self.data[index] != subset[0]:
                continue 
        else:
            sub = slice(index, index + len(subset))
            if self.data[sub] == subset:
                result = index 
                break
            else:
                result = 'Not Found!'
    return result


    x = Search(large_data)

    #thread_1:

    x.search(sublist)

    #thread_2:

    x.search(sublist, reverse=True)

标签: pythonpython-3.xalgorithmsearchgenerator

解决方案


据我了解您的问题,您需要在数据集加载功能中进行迭代。这取决于数据来自哪里。对于文件和数据库,您将在文档中找到简单的解决方案。如果您使用某些 Web API,则可以使用分页。


推荐阅读