Aquí hay un problema aparentemente simple: dada una lista de iteradores que arrojan secuencias de enteros en orden ascendente, escriba un generador conciso que arroje solo los enteros que aparecen en cada secuencia.Uniéndose a un conjunto de enteros ordenados que producen iteradores de Python
Después de leer algunos documentos anoche, decidí hackear un indexador de texto completo completamente mínimo en Python, as seen here (aunque esa versión ya es bastante antigua).
Mi problema es con la función search()
, que debe iterar sobre cada lista de publicación y ceder solo las identificaciones de documentos que aparecen en cada lista. Como puede ver en el enlace de arriba, mi intento actual de "trabajo" no recursivo es terrible.
Ejemplo:
postings = [[1, 100, 142, 322, 12312],
[2, 100, 101, 322, 1221],
[100, 142, 322, 956, 1222]]
debe ceder:
[100, 322]
Hay al menos una solución función recursiva elegante a este, pero me gustaría evitar que si es posible. Sin embargo, una solución que involucre expresiones generadas anidadas, abuso de itertools
, o cualquier otro tipo de código de golf es más que bienvenido. :-)
Debería ser posible disponer que la función solo requiera tantos pasos como elementos en la lista más pequeña, y sin aspirar todo el conjunto de enteros en la memoria. En el futuro, estas listas se pueden leer desde el disco y son más grandes que la memoria RAM disponible.
Durante los últimos 30 minutos he tenido una idea en la punta de la lengua, pero no puedo escribirla. Recuerde, esto es solo por diversión!
¡Impresionante!Sabía que esto debe haber estado en la biblioteca estándar. Tristemente solo para Python 2.6, pero está bien. – dmw
¡Guau, solución genial! –
Buena solución, aunque asume que los números enteros nunca se repiten dentro de un solo iterador, lo que no es una suposición permitida por el OP. posting = [[100,100], [1,1]] devuelve [100,1] aunque no se repitan valores en todas las listas. – Triptych