这是一个看似简单的问题:给定一个迭代器列表,这些迭代器按升序产生整数序列,编写一个简洁的生成器,它只产生出现在每个序列中的整数。
昨晚阅读了几篇论文后,我决定用 Python 破解一个完全最小的全文索引器,如图所示(尽管那个版本现在已经很老了)。
我的问题在于该search()
函数,它必须遍历每个发布列表并仅生成出现在每个列表上的文档 ID。正如您从上面的链接中看到的那样,我当前的非递归“工作”尝试非常糟糕。
示例:
postings = [[1, 100, 142, 322, 12312],
[2, 100, 101, 322, 1221],
[100, 142, 322, 956, 1222]]
应该产生:
[100, 322]
至少有一个优雅的递归函数解决方案,但如果可能的话,我想避免这种情况。但是,涉及嵌套生成器表达式、itertools
滥用或任何其他类型的代码高尔夫的解决方案非常受欢迎。:-)
应该可以安排该函数只需要与最小列表中的项目一样多的步骤,而无需将整个整数集吸入内存。将来,这些列表可能会从磁盘读取,并且大于可用 RAM。
在过去的 30 分钟里,我在舌尖有了一个想法,但我无法将其完全融入代码中。请记住,这只是为了好玩!