¿Cómo puedo hacer un Python equivalente a pdtolist desde Pop-11?Lista dinámica que se expande automáticamente
Supongamos que tengo un generador llamado g que devuelve (digamos) números enteros de a uno por vez. Me gustaría construir una lista a que crece automáticamente a medida que solicito valores más allá del final actual de la lista. Por ejemplo:
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
Terminología - anticipar un malentendido probable: una lista es una "matriz dinámica" pero eso no es lo que quiero decir; Me gustaría una "lista dinámica" en un sentido más abstracto.
Para explicar mejor la motivación, suponga que tiene 999999999 elementos para procesar. Intentar encajar todos esos en la memoria (en una lista normal) de una sola vez sería un desafío. Un generador resuelve esa parte del problema presentándolos uno a la vez; cada uno creado a pedido o leído individualmente desde el disco. Pero supongamos que durante el procesamiento desea hacer referencia a algunos valores recientes, no solo a los actuales. Podría recordar los últimos (digamos) diez valores en una lista separada. Pero una lista dinámica es mejor, ya que los recuerda automáticamente.
Reemplace el método '__getitem__' de la lista para capturar el' IndexError'. –
Entonces, tiene la lista 'L' y realiza' L [999999999] '- ¿la lista debería tener esa longitud? –
Sí, en principio. ¡Caveat Programmor! –