2012-05-19 12 views
37

Digamos que tengo una lista a=[1,2,3] Y yo quiero saber si al menos uno de los números en que existen en otra lista, como éste: b=[4,5,6,7,8,1] En otras palabras, quiero saber si o 1,2 3 existe (s) en la lista b. que ahora podía hacer algo comoone-liner para comprobar si existe al menos un elemento en la lista en otra lista?

def func(a, b): 
    for i in a: 
     if i in b: 
      return True 
    return False 

Pero, ¿existe posiblemente una manera de poner esto en una línea para hacer las cosas ordenadas?

Respuesta

41

Hay muchas formas de hacerlo. La traducción más directa es:

any_in = lambda a, b: any(i in b for i in a) 

También es posible usar varias cosas que involucran conjuntos, tales como:

any_in = lambda a, b: bool(set(a).intersection(b)) 

(que depende de los elementos de a siendo hashable, pero si eso es cierto, es Probablemente sea más rápido hacer un conjunto de los mayores de a y b para cualquiera de estos enfoques).

Editar: isdisjoint es mejor que intersection para Python 2.6 y superior, según lo observado por varias personas a continuación. Me alegra aprender sobre eso. :)

32

un sencillo de una sola línea sería:

any(i in b for i in a) 
+3

mejor solución Pythonic – clg4

5

Mediante la conversión de sus listas de juegos que puede realizar operaciones con el conjunto de ellos. Si la intersección es mayor que 0, tiene al menos un elemento que coincida:

len(set(a) & set(b)) > 0 
+0

misma idea, otras variaciones: 'bool (juego (a) y establecer (b))' 'set o simplemente (a) & set (b) ' – johnP

2

Esto debería funcionar.

def func(a, b): 
    return any([i in b for i in a]) 
52

Python 2.6 y superiores:

def func(a, b): 
    return not set(a).isdisjoint(b) 

Para 2.4 o 2.5:

def func(a, b): 
    return len(set(a).intersection(b)) != 0 

Para 2,3 y a continuación:

sudo apt-get update 
sudo apt-get upgrade 

;)

+9

upvote para 2.3 y siguientes. eso fue gracioso: D ... respuesta correcta aunque – mkab

+4

Votación hacia arriba para los LOL –

11

Esto es un problema de conjunto problema, no un problema lista. Con el tipo de datos correcto, la respuesta es a menudo inmediatamente obvio :-)

def func(a, b): 
    return not set(a).isdisjoint(b) 
+0

¿quién dice que es un problema establecido? ¿Qué pasa con '[a, a, a, b]' y '[a, a, b]'. Un elemento 'a' existe en la primera lista, pero no en la segunda. –

Cuestiones relacionadas