2012-01-02 19 views
66

Estoy un poco confundido acerca del operador python en sets.operador del conjunto "en" Python

Si tengo un conjunto en python s y alguna instancia b, ¿es cierto que "b en s" significa "¿hay algún elemento x en s tal que b == x es verdadero"?

+27

Es usted un matemático? Describiendo cosas simples de una manera excesivamente compleja ...;) – ThiefMaster

+5

Computer Scientist. Estoy un poco confundido porque la documentación dice "Prueba x para membresía en s". Para mí eso podría significar que "la instancia x está contenida en s" o "existe alguna instancia en s que tiene el mismo valor que x". No sé si esta es una comparación de identidad o igualdad. – Dejas

+3

@Dejas: como sabe que Python tiene dos operadores Comparación de igualdad y comparación de identidad, debería poder construir un experimento que confirme cada uno. Ayudaría si publicaras ese experimento. –

Respuesta

55

Sí, pero también significa hash(b) == hash(x), por lo que la igualdad de los elementos no es suficiente para que sean iguales.

+7

Ok, entonces "¿hay un elemento x en s tal que hash (b) == hash (x) yx == b"? – Dejas

+0

@Dejas: Correcto. –

+4

Si alguien implementó la función hash de su clase de una manera retorcida, esto es lo que puede obtener (y merecer). – ugoren

0

Sí. Significa que el elemento dado está en el conjunto.

+1

Para que quede claro. por "está en el conjunto" quiere decir "a == b" y no "a es b", ¿correcto? – Dejas

34

Correcto. Usted podría intentar que en el intérprete de esta manera:

>>> a_set = set(['a', 'b', 'c']) 

>>> 'a' in a_set 
True 

>>>'d' in a_set 
False 
+3

Fyi, 'sets' está en desuso. 'set()' es un built-in desde hace bastante tiempo. – ThiefMaster

+0

Oh, por supuesto. Perdón :) Cambio mi muestra ... –

+0

Esta no es una muy buena prueba ya que las constantes de cadena a menudo se internan (intente 'a =' a '; b =' a '; a es b'). Lo intenté con 'a = (1, 2, 3); b = (1, 2, 3); a == b; hash (a) == hash (b); a es b; a en conjunto ([b]) 'en su lugar. – Philipp

0

cuerdas, aunque no son set tipos, tienen una valiosa propiedad in durante la validación en los scripts:

yn = input("Are you sure you want to do this? ") 
if yn in "yes": 
    #accepts 'y' OR 'e' OR 's' OR 'ye' OR 'es' OR 'yes' 
    return True 
return False 

espero que esto le ayuda a comprender mejor el uso de in con este ejemplo.

+1

Eso no es un conjunto. Tampoco son cadenas mutables. –

+0

No sé lo que estaba pensando ... tienes razón. – Droogans

+3

'... o 'e' o 'es' o 's''. Considere la posibilidad de eliminar esta respuesta inútilmente incorrecta. – Quuxplusone

8

Sí, puede significar eso, o puede ser un simple iterador. Por ejemplo: Ejemplo como iterador:

a=set(['1','2','3']) 
for x in a: 
print ('This set contains the value ' + x) 

Del mismo modo como un cheque:

a=set('ILovePython') 
if 'I' in a: 
print ('There is an "I" in here') 

Editado: Editado para incluir series en vez de listas y cadenas

+0

¿Qué tiene esto que ver con los conjuntos? –

+0

Bueno, supongo que se puede considerar que una lista o incluso una cadena tienen propiedades similares a un conjunto. Son una colección de elementos. –

+1

No, los conjuntos tienen una condición adicional para una verificación de contención que las secuencias no hacen. –

Cuestiones relacionadas