Создание пользовательских итераторов в Python для поиска подсписков в больших наборах данных - PullRequest
1 голос
/ 10 апреля 2019

Я учусь / экспериментирую с итераторами / генераторами в 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)

1 Ответ

0 голосов
/ 10 апреля 2019

Как я понимаю ваш вопрос, вам нужна итерация в функции загрузки набора данных. И здесь все зависит от того, откуда поступают данные. Для файлов и баз данных вы найдете простые решения в документации. Если вы используете какой-либо веб-API, вы можете использовать нумерацию страниц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...