2011-08-23 9 views
18

Ho scoperto che un elenco è maggiore di un numero.Elenco Python maggiore del numero

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

C'è qualche motivo per cui funziona? Non riesco a convertire una lista in una int con int([1,2,3]). L'int non può essere convertito in una lista con list(1000). Quindi, come fa Python a confrontare i due?

+3

Questo funziona in Python 3? –

+2

@Mike, no. ottieni un errore TypeE –

+2

** Trovato: ** Sepolto in [PEP 3100] (http://www.python.org/dev/peps/pep-3100/): "Confronti diversi da' == 'e'! = 'tra tipi disparati genererà un'eccezione a meno che non sia esplicitamente supportato dal tipo" –

risposta

26

In questo caso di tipi "non corrispondenti", i tipi sono elencati lessicograficamente per nome tipo: una "lista" viene dopo un "int" in ordine alfabetico, quindi è maggiore.

Dettaglio implementazione CPython: Gli oggetti di tipi diversi ad eccezione dei numeri sono ordinati in base al loro tipo; oggetti dello stesso tipo che non supportano il confronto corretto sono ordinati dal loro indirizzo. (source)

Non v'è alcuna specifica lingua per l'ordinamento (a parte il fatto che è coerente). Succede solo che CPython è l'implementazione più comune in cui vi è questo dettaglio del linguaggio di essere ordinato lessicograficamente dai nomi dei tipi.

+8

Stavo proprio per dirlo. In Python 3 non sono paragonabili. Inoltre, in Python 2.x None sarà sempre confrontato meno di ogni altra cosa. – RxS

+1

@Uku Loskit _ "i tipi sono elencati lessicograficamente" _ Dove? – eyquem

+0

@machine yearning & eyquem: aggiornata la risposta un po '. –

10

Secondo il Python Reference Manual,

maggior parte degli altri oggetti di tipi predefiniti confrontare disuguali meno che non siano lo stesso oggetto; la scelta se un oggetto è considerato più piccolo o più grande di un altro viene fatto arbitrariamente ma in modo coerente all'interno di un'esecuzione di un programma.

Problemi correlati