2011-08-23 31 views
18

He descubierto que la lista es mayor que un número.lista de Python mayor que el número

>>> [1,2,3] > 1000 
True 

¿Hay alguna razón para que esto funcione? No puedo convertir una lista a un int con int([1,2,3]). El int no se puede convertir a una lista con list(1000). Entonces, ¿cómo es python comparando los dos?

+3

¿Funciona esto en Python 3? –

+2

@Mike, no. obtiene un TypeError –

+2

** Encontrado: ** Enterrado en [PEP 3100] (http://www.python.org/dev/peps/pep-3100/): "Comparaciones distintas de' == 'y'! = 'entre tipos dispares generará una excepción a menos que sea explícitamente compatible con el tipo" –

Respuesta

26

En este caso de tipos "no coincidentes", los tipos se enumeran lexicográficamente por nombre de tipo: una "lista" viene después de un "int" en orden alfabético, por lo que es mayor.

detalle de implementación de CPython: Los objetos de tipos diferentes, excepto , se ordenan por nombre de tipo; objetos de los mismos tipos que no admiten una comparación adecuada están ordenados por su dirección. (source)

No hay ninguna especificación del lenguaje para el ordenamiento (aparte del hecho de que es consistente). Simplemente sucede que CPython es la implementación más común en la que hay detalles de este lenguaje ordenados lexicográficamente por nombres de tipos.

+8

Estaba a punto de decir esto. En Python 3 no son comparables. Además, en Python 2.x ninguno siempre se comparará menos que cualquier otra cosa. – RxS

+1

@Uku Loskit _ "los tipos están listados lexicográficamente" _ ¿Dónde? – eyquem

+0

@machine yearning & eyquem: actualizó la respuesta un poco. –

10

De acuerdo con la Python Reference Manual,

La mayoría de los otros objetos de tipos incorporados comparar desigual a menos que sean el mismo objeto; la elección de si un objeto se considera más pequeño o más grande que otro se hace de forma arbitraria pero consistente dentro de una ejecución de un programa.

Cuestiones relacionadas