2011-09-24 14 views
6
a = [1, 2, 3, 4] 
b = [2, 4, 3, 1] 
c = [2, 3] 

Al comparar a hasta b, debe devolver True: todos los elementos de a se presentan en b, y todos los artículos en b se presentan en a.¿Cómo puedo comparar dos listas en python y devolver que la segunda necesidad de tener los mismos valores independientemente del orden?

Al comparar a a c, debe devolver False: hay artículos en a que no existen en c.

¿Cuál es la forma pythonic para hacerlo?

+2

¿Hay entradas duplicadas en sus listas? – Howard

+0

No hay duplicados. –

+1

Si el orden no importa, debe usar conjuntos en lugar de listas. – delnan

Respuesta

12

Ordena, luego compara.

sorted(a) == sorted(b) 
5

Use sets o frozensets.

set_a = {1, 2, 3, 4} #python 2.7 or higher set literal, use the set(iter) syntax for older versions 
set_b = {2, 4, 4, 1} 

set_a == set_b 

set_a - set_b == set_b - set_a 

La mayor ventaja de utilizar conjuntos a través de cualquier método de la lista es que es muy fácil de leer, que no ha mutado su iterables original, se puede realizar bien incluso en los casos en que a es enorme y b es pequeña (la comprobación de si ayb tienen la misma longitud primero es una buena optimización si esperas este caso seguido, sin embargo), y usar la estructura de datos correcta para el trabajo es pitónico.

2

Uso set s:

In [4]: set(a) == set(b) 
Out[4]: True 

In [5]: set(a) == set(c) 
Out[5]: False 
2

los convierten en conjuntos:

>>> set([1,2,3,4]) == set([2,4,3,1]) 
True 

>>> set([2, 3]) == set([1,2,3,4]) 
False 

Si sus listas contienen elementos duplicados, que tendrá que comparar sus longitudes demasiado. Establece el colapso de duplicados.

+2

Comprobar la longitud no es suficiente: '[1,1,2,3]! = [1,2,3,3]' – Howard

+2

@Howard: Pero el único criterio era: todos los elementos en 'a' se presentan en' b ', y todos los elementos en' b' se presentan en 'a'. Según esos criterios, '[1,1,2,3] == [1,2,3,3]'. – Johnsyweb

+0

Por la descripción más estricta de su problema, la longitud no es necesaria, el interrogador describió una prueba donde todos los elementos aparecen en b. – marr75

Cuestiones relacionadas