Вот, казалось бы, простая проблема: учитывая список итераторов, которые приводят последовательности целых чисел в порядке возрастания, напишите сжатый генератор, который дает только целые числа, которые появляются в каждой последовательности.
Прочитав несколько статей прошлой ночью, я решил взломать полностью минимальный полнотекстовый индекс в Python, как показано здесь (хотя это версия довольно старая).
Моя проблема связана с функцией search()
, которая должна проходить через каждый список проводки и отображать только идентификаторы документов, которые отображаются в каждом списке. Как видно из приведенной выше ссылки, моя текущая нерекурсивная "рабочая" попытка ужасна.
Пример:
postings = [[1, 100, 142, 322, 12312],
[2, 100, 101, 322, 1221],
[100, 142, 322, 956, 1222]]
Должен выдать:
[100, 322]
Для этого существует хотя бы одно изящное решение для рекурсивных функций, но я хотел бы избежать этого, если это возможно. Тем не менее, решение, включающее вложенные выражения генератора, itertools
злоупотребления или любой другой вид гольф-кода, более чем приветствуется.: -)
Должна быть предусмотрена возможность для функции требовать столько шагов, сколько есть элементов в самом маленьком списке, и не всасывать весь набор целых чисел в память. В будущем эти списки могут считываться с диска и больше, чем доступная оперативная память.
За последние 30 минут у меня появилась идея на кончике моего языка, но я не могу понять ее код. Помните, это просто для удовольствия!