entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Aplanando una lista anidada

Hola comunidad, estoy haciendo ejercicios para aprender Python.

Encontré uno en donde debo de de "aplanar" una lista anidada.

Algo así:

>>>flatten([[1, 2, 3], [4, 5 ,6, [7, 8, 9]]])
[1,2,3,4,5,6,7,8,9]

Entonces encontré un código de ejemplo:

def flatten(l):
    ret = []
    for i in l:
        if isinstance(i, list) or isinstance(i, tuple):
            ret.extend(flatten(i)) #flatten() siendo usado dentro de def flatten()
        else:
            ret.append(i)
    return ret

Y tengo ésta pregunta:

Es posible usar la función que está siendo definida dentro de la función misma?

Otra forma de explicar la pregunta:
Cuando estamos definiendo flatten(), es posible llamar a flatten() dentro de la definición de la función?

1 Respuesta

2votos

juan_luis_cano Puntos1520

se puede, y de hecho si ejecutas ese código verás que funciona :)

Esta técnica se llama recursión o recursividad y es la base de multitud de algoritmos. Aquí puedes leer una explicación a propósito de un curioso huevo de pascua que introdujo Google en su buscador:

http://www.libertaddigital.com/internet/que-es-la-recursividad-que-es-la-recursividad-que-es-la-recursividad-1276366373/

Edit: Esta llamada se evaluará descendiendo en la cadena de recursión, hasta que la función devuelva algo que no sea una llamada a sí misma. Este proceso tiene un límite:

>>> import sys
>>> sys.getrecursionlimit()
1000

Hay un máximo en el número de veces que una función puede llamarse a sí misma. Se puede modificar, pero no es recomendable.

0voto

arturo_balbuena comentado

Una dudita más (creo que me faltó ponerla), es: ¿Cómo se evalúa esa llamada de función? que valor regresa?

0voto

Peter comentado

Mejor abre una pregunta nueva, que ese ya es otro tema :D

0voto

juan_luis_cano comentado

Bueno, puedo actualizar mi respuesta en realidad :)

0voto

Peter comentado

El detalle es que es correcta para la pregunta original y si se va cambiando todo el tiempo a cosas distintas solo va a confundir a otros usuarios, por eso creo que es mejor darle solución a cada tema por separado :)

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta