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