Iterar una lista de forma recursiva con Python

22/Nov/2015 Python , , , 2 Comentarios

En este ejemplo vamos a ver como podemos iterar una lista de forma recursiva con Python. Y es que las listas de Python pueden contener a su vez otras listas, por lo tanto deberemos de tener una forma de recorrer la lista principal e ir recorriendo, a su vez, las listas anidadas. Independientemente del grado de anidación que tengamos.

Lo primero será definir la lista en Python.

  1. lista = [1,2,3,['a','b','c','d'],4,5]

Como podemos observar el cuarto elemento es a su vez una lista. Hay que recordar que los elementos de las listas en Python se definen mediante corchetes y separados por comas.

Para poder recorrer la lista en Python utilizamos un bucle for-each de la siguiente forma:

  1. for n in lista:
  2. print n
  3.  

Para poder reutilizar el código vamos a definir un método el cual nos realice el código que recorra la lista.

  1. def listar (lista):
  2. for n in lista:
  3. print n
  4.  

Al ejecutar este código el resultado que tenemos es el siguiente:

1
2
3
['a', 'b', 'c', 'd']
4
5

Vemos que la lista que ocupaba el cuarto elemento se imprime tal cual. Así que deberemos de modificar el código para preguntar por si el elemento es una lista. Para ellos utilizamos el método isinstance() al cual le pasamos el elemento.

Lo que vamos a hacer es que en el caso de que el elemento sea una lista volver a llamar al método listar(), lo cual hará que se vuelva a ejecutar el código que itera por los elementos de la lista, pero que no permita iterar una lista de forma recursiva con Python.

  1. def listar (lista):
  2. for n in lista:
  3. if isinstance(n,list):
  4. listar(n)
  5. else:
  6. print n
  7.  

El resultado que conseguimos ahora es:

1
2
3
a
b
c
d
4
5

De esta forma ya tenemos el código que buscábamos y que nos ayuda a iterar una lista de forma recursiva con Python.

Vídeos sobre Python


2 comentarios en “Iterar una lista de forma recursiva con Python”

Víctor Cuervo

Jonathan

Hola, buen ejemplo pero técnicamente no estas imprimiendo nada, a final del método tienes que imprimir la variable n

def listar (lista):
for n in lista:
if isinstance(n,list):
listar(n)
else:
print n

Saludos.

Víctor Cuervo

Víctor Cuervo

Hola Jonathan… tenía puesto el print n en el código, pero el formateador de la web lo estaba eliminando, no sé muy bien por qué. Gracias por el aviso, ya está solucionado.

Saludos.

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

*