Le liste di comprensione in Python si riducono in modo efficiente in termini di memoria?

StackOverflow https://stackoverflow.com/questions/5349755

  •  27-10-2019
  •  | 
  •  

Domanda

Sono un principiante in Python e questo è il mio primo post, quindi non essere troppo duro :).Ultimamente ho giocato con Python e mi chiedevo se qualcosa di simile

max([x for x in range(25)]) 

comporterebbe che Python crei prima un elenco di tutti gli elementi e poi trovi il massimo, risultando in tempo O (2n), oppure terrebbe traccia del massimo mentre itera per Θ (n).Inoltre, poiché l'intervallo è diverso in Python3 (essendo un iterabile), questo lo renderebbe diverso rispetto a Python2?

È stato utile?

Soluzione

Il tuo esempio farà sì che Python crei prima l'intero elenco.Se vuoi evitarlo, puoi usare invece un'espressione del generatore:

max((x for x in range(25)))

o semplicemente:

max(x for x in range(25))

Ovviamente (in Python 2), range stesso crea un intero elenco, quindi quello che vuoi veramente in questo caso è:

max(x for x in xrange(25))

Tuttavia, per quanto riguarda il tempo impiegato, tutte queste espressioni hanno la stessa complessità.La differenza importante è che l'ultimo richiede uno spazio O (1), mentre gli altri richiedono uno spazio O (n).

Altri suggerimenti

Le liste di comprensione generano sempre una lista (a meno che qualcosa non generi un'eccezione).L'uso di un genex è invece consigliato nella maggior parte dei casi.

max(x for x in xrange(25))
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top