Te doy la bienvenida a nuestra página, aquí vas a encontrar la respuesta que buscabas.
Solución:
Esto es lo que creó su código
Es una lista en la que el primer y el último elemento apuntan a dos números (1 y 2) y el elemento central apunta a la lista misma.
En Common Lisp, cuando se habilita la impresión de estructuras circulares, dicho objeto se imprimiría como
#1=#(1 #1# 2)
lo que significa que hay un objeto (etiquetado 1 con #1=
) que es un vector con tres elementos, siendo el segundo el objeto mismo (referenciado hacia atrás con #1#
).
En Python, en cambio, solo obtienes la información de que la estructura es circular con [...]
.
En este caso específico, la descripción no es ambigua (está apuntando hacia atrás a una lista, pero solo hay una lista, por lo que debe ser esa). En otros casos puede ser sin embargo ambiguo… por ejemplo en
[1, [2, [...], 3]]
la referencia hacia atrás podría apuntar a la lista externa o interna. Estas dos estructuras diferentes impresas de la misma manera se pueden crear con
x = [1, [2, 3]]
x[1][1:1] = [x[1]]
y = [1, [2, 3]]
y[1][1:1] = [y]
print(x)
print(y)
y quedarían en la memoria como
Significa que creaste una lista infinita anidada dentro de sí misma, que no se puede imprimir. p
contiene p
que contiene p
… y así. los [...]
¡La notación es una forma de hacerle saber esto y de informarle que no se puede representar! Eche un vistazo a la respuesta de @ 6502 para ver una buena imagen que muestra lo que está sucediendo.
Ahora, con respecto a los tres elementos nuevos después de su edición:
- Esta respuesta parece cubrirlo
- El enlace de Ignacio describe algunos usos posibles
- Este es más un tema de diseño de estructuras de datos que de lenguajes de programación, por lo que es poco probable que se encuentre alguna referencia en la documentación oficial de Python.
A la pregunta “¿Para qué sirve?”, aquí hay un ejemplo concreto.
La reducción de gráficos es una estrategia de evaluación que se utiliza en ocasiones para interpretar un lenguaje informático. Esta es una estrategia común para la evaluación perezosa, especialmente de lenguajes funcionales.
El punto de partida es construir un gráfico que represente la secuencia de “pasos” que tomará el programa. Dependiendo de las estructuras de control utilizadas en ese programa, esto podría conducir a una cíclico gráfico (porque el programa contiene algún tipo de bucle “perpetuo”, o use la recursividad cuya “profundidad” se conocerá en evaluación tiempo, pero no en creación de gráficos tiempo)…
Para representar dicha gráfica, es necesario infinito “estructuras de datos” (a veces llamadas recursivo estructuras de datos), como la que notó. Sin embargo, por lo general, un poco más complejo.
Si está interesado en ese tema, aquí hay (entre muchos otros) una conferencia sobre ese tema:
http://undergraduate.csse.uwa.edu.au/units/CITS3211/lectureNotes/14.pdf
valoraciones y comentarios
Si conservas algún titubeo o disposición de mejorar nuestro tutorial te inspiramos escribir una ilustración y con mucho gusto lo leeremos.