Lista de elementos comunes

Chema Cortes py en ch3m4.org
Vie Mar 23 02:29:15 CET 2007


El Jueves, 22 de Marzo de 2007 19:28, Alberto Valverde escribió:

> Oops, eso está mal, mejor:
>
> comunes = set(lista[0])
> for tupla in lista[1:]:
> 	comunes &= set(tupla)

Personalmente, me gustan más las expresiones funcionales:

  reduce(set.intersection, map(set,lista))


Lástima que el reduce() tenga sus días contandos y se esté previsto su 
eliminación del lenguaje. Una solución alternativa en una sóla línea, y sin 
recurrir a los conjuntos set(), sería ésta:

  [i for i in lista[0] if [True for x in lista[1:] if i in x] ]

No parece que quede más claro que emplear reduce(); pero, gracias al BDFL. en 
python 2.5 se introdujeron los iteradores any() y all(), con lo que quedaría 
así de majo:

  [i for i in lista[0] if all(i in x for x in lista[1:]) ]




Más información sobre la lista de distribución Python-es