[Python-es] Buscar varios elementos en una lista

Olemis Lang (Simelix) olemis+py en gmail.com
Mar Feb 16 22:34:44 CET 2010


On 2/16/10, marmolro <marmolro en gmail.com> wrote:
>
>
> 2010/2/16 Daniel Garcia Moreno <dani en danigm.net>
>
> > 2010/2/16 Oswaldo Hernández <listas en soft-com.es>:
> >
> > > Hola,
> > >
> > > Tengo una lista de valores y otra de datos, quiero comprobar si uno
> > > cualquiera de los valores existe en la lista de datos. En este momento
> lo
> > > hago utilizando un bucle for para comprobar uno a uno:
> > >
> > > valores = (15, 45, 190)
> > > datos = (22, 33, 55, 567, 44, 234, 45)
> > > existe = False
> > >
> > > for v in valores:
> > >    if v in datos:
> > >        existe = True
> > >        break
> > >
> > > if existe:
> > >    ...
> > > else:
> > >    ...
> > >
> > > La pregunta es ¿Existe alguna forma mas compacta de hacerlo?
> > >
> >
> > set(valores).intersection(set(datos))
> >
> > No se si te he entendido bien, pero si es así, esto debería valer.
> >
>
> Con List comprehensions:
>
>
> >>> [v in datos for v in valores]
> [False, True, False]
>
> y rizando el rizo:
>
> >>> True in [v in datos for v in valores]
> True
>
> Ahora bien, no sé si a nivel de prestaciones que es mejor :)
>

Esto es un poco ineficiente . Mi variante (Py>=2.5 ;o) sería

{{{
#!python
any(v in datos for v in valores)
}}}

usando generadores ;o)

-- 
Regards,

Olemis.

Blog ES: http://simelo-es.blogspot.com/
Blog EN: http://simelo-en.blogspot.com/

Featured article:



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