lenguaje - python tutorial
En Python, ¿por qué es[2] menos que(1,)? (2)
Las secuencias no son obligadas cuando se comparan, por lo tanto, se compara el nombre de su tipo.
>>> ''list'' < ''tuple''
True
FONDO
He estado tratando de averiguar por qué mi IA ha estado haciendo algunos movimientos locos y rastreé el problema de nuevo al siguiente comportamiento cuando uso Python 2.7.2
>>> print [2]>[1]
True
>>> print (2,)>(1,)
True
>>> print [2]>(1,)
False (WHY?)
>>> print [2]<[1]
False
>>> print (2,)<(1,)
False
>>> print [2]<(1,)
True (WHY?)
Parece comportarse como si las listas fueran siempre menos que tuplas.
Esto no es lo que esperaba de la documentation
Las tuplas y las listas se comparan lexicográficamente mediante la comparación de los elementos correspondientes. Esto significa que para comparar igual, cada elemento debe comparar igual y las dos secuencias deben ser del mismo tipo y tener la misma longitud.
Si no es igual, las secuencias se ordenan igual que sus primeros elementos diferentes. Por ejemplo, cmp ([1,2, x], [1,2, y]) devuelve lo mismo que cmp (x, y). Si el elemento correspondiente no existe, la secuencia más corta se ordenará primero (por ejemplo, [1,2] <[1,2,3]).
PREGUNTA
¿Que esta pasando aqui? ¿Se me permite comparar tuplas y listas, o tal vez solo se me permite comparar el mismo tipo consigo mismo?
No son del mismo tipo.
cada elemento debe compararse igual y las dos secuencias deben ser del mismo tipo y tener la misma longitud
Por lo tanto, la comparación se realiza según el tipo, no sobre los datos reales almacenados en las secuencias. En python3.x, esta comparación genera un TypeError
:
Python 3.2 (r32:88445, May 11 2011, 09:23:22)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> [2] > (1,)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: list() > tuple()