Dado: una lista de listas, como [[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]
¿Cuál es la manera Pythonic de encontrar el prefijo común más largo de una lista de listas?
Todo: Encontrar el prefijo común más larga de todas las sublistas.
Existe: en otro hilo "Common elements between two lists not using sets in Python", se sugiere utilizar "Contador", que está disponible arriba de python 2.7. Sin embargo, nuestro proyecto actual se escribió en python 2.6, por lo que "Counter" no se usa.
que actualmente código de esta manera:
l = [[3,2,1], [3,2,1,4,5], [3,2,1,8,9], [3,2,1,5,7,8,9]]
newl = l[0]
if len(l)>1:
for li in l[1:]:
newl = [x for x in newl if x in li]
Pero no resulta muy Pythonic, hay una mejor forma de codificar?
Gracias!
Nueva edición: Perdón por mencionar: en mi caso, los elementos compartidos de las listas en 'l' tienen el mismo orden y siempre comienzan desde el 0 ° elemento. Por lo tanto, no tendrá casos como [[1,2,5,6],[2,1,7]]
¿Cuál es la salida esperada para '[[1, 2, 3], [3, 2, 1]]'? –
'Counter' no conserva el orden de todos modos. ¿Cuáles son los elementos comunes entre '[3, 2, 1]' y '[4, 3, 2, 1]'? '[]' o '[3, 2, 1]'? Estoy preguntando: ¿posicionar la materia y el orden? Si la posición no importa, entonces es el [más larga subcadena problema común] (https://en.wikipedia.org/wiki/Longest_common_substring_problem), que se puede encontrar la respuesta a otro lugar en este sitio – agf
lo que se espera que la producción de [[ 1,2,3], [1,4,2,3]] –