2012-05-02 8 views
174

Tengo una lista de tuplas en Python, y tengo un condicional donde quiero tomar la rama SOLAMENTE si la tupla no está en la lista (si está en la lista , entonces no quiero tomar la rama if)Compruebe si algo no está en una lista en Python

if curr_x -1 > 0 and (curr_x-1 , curr_y) not in myList: 

    # Do Something 

Aunque esto realmente no me funciona. ¿Qué he hecho mal?

+9

No utilice 'list' como una variable nombre. ¿Cuál es el resultado de error aquí? – bossylobster

+1

Tenga en cuenta que '3 -1> 0 y (4-1, 5) no en []' ⤇ 'True' por lo tanto, el error no es uno de precedencia del operador. –

+2

¿Qué quiere decir con "realmente no funciona para mí"? ¿Qué esperas que pase? ¿Qué sucede realmente? ¿Qué contenido exacto de la lista desencadena el problema? –

Respuesta

269

El error es probable que otra parte de su código, ya que debería funcionar bien:

>>> 3 not in [2, 3, 4] 
False 
>>> 3 not in [4, 5, 6] 
True 

O con tuplas:

>>> (2, 3) not in [(2, 3), (5, 6), (9, 1)] 
False 
>>> (2, 3) not in [(2, 7), (7, 3), "hi"] 
True 
+8

@Zack: si no sabías nada esto, podría hacer 'si no ELEMENT en COLECCIÓN:' – ninjagecko

+0

@ninjagecko: dependiendo del tipo de contenedor que podría ser menos eficiente, o incluso incorrecto. Ver por ejemplo [bloom filters] (http://en.wikipedia.org/wiki/Bloom_filter). – orlp

+0

era una forma de definir mis tuplas dentro de la lista, gracias chicos – Zack

-1
a = [23, 11, 21, 34, 53, 89, 133, 211, 345, 535, 895] 

b = [11, 32, 33, 45, 25, 66, 87, 863, 97, 130, 141, 126, 13] 

x=[] 
for i in a: 
    for j in b: 
     if i==j and j not in x: 
      x.append(j) 

print(x) 
Cuestiones relacionadas