Come posso creare un equivalente Python di pdtolist da Pop-11?Elenco dinamico che si espande automaticamente
Si supponga di avere un generatore chiamato g che restituisce (diciamo) numeri interi uno alla volta. Mi piacerebbe costruire un elenco a che cresce automaticamente mentre chiedo valori oltre la fine attuale dell'elenco. Per esempio:
print a # => [ 0, 1, 2, g]
print a[0] # => 0
print a[1] # => 1
print a[2] # => 2
# (obvious enough up to here)
print a[6] # => 6
print a # => [ 0, 1, 2, 3, 4, 5, 6, g]
# list has automatically expanded
a = a[4:] # discard some previous values
print a # => [ 4, 5, 6, g]
print a[0] # => 4
Terminologia - di anticipare una probabile equivoco: una lista è un "array dinamico", ma non è questo quello che voglio dire; Mi piacerebbe una "lista dinamica" in un senso più astratto.
Per spiegare meglio la motivazione, supponiamo di avere 999999999 elementi da elaborare. Cercare di adattare tutti quelli in memoria (in una lista normale) tutto in una volta sarebbe una sfida. Un generatore risolve quella parte del problema presentandoli uno alla volta; ognuno creato su richiesta o letto individualmente dal disco. Ma supponiamo che durante l'elaborazione vuoi fare riferimento ad alcuni valori recenti, non solo a quelli attuali? Potresti ricordare gli ultimi (diciamo) dieci valori in una lista separata. Ma una lista dinamica è migliore, in quanto li ricorda automaticamente.
Sostituire il metodo '__getitem__' della lista per catturare l'oggetto 'IndexError'. –
Quindi hai la lista 'L' ed esegui' L [999999999] '- la lista dovrebbe diventare quella lunghezza? –
Sì, in linea di principio. Programmatore di caveat! –