es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Calcula la suma de la lista anidada que contiene cadenas de texto y enteros en Python.

Sé cómo obtener la suma de una lista anidada que solo contiene números, pero ¿cómo obtengo la suma de una lista anidada que contiene tanto cadenas como números?

def sum_all_numbers(seq):
    if not seq:
        return 0
    elif isinstance(seq[0], str):
        seq.remove(seq[0])
    elif isinstance(seq[0], list):
        return sum_all_numbers(seq[0]) + sum_all_numbers(seq[1:])
    else:
        return seq[0] + sum_all_numbers(seq[1:])

Quería usar recursión doble para resolver este problema, pero no logro obtener la parte de isinstance correctamente.

sum_all_numbers(["a", "b", ["c", 3, 4, [5, "d"], 10], 9]) es la entrada.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para sumar una lista anidada que contiene tanto cadenas de texto como números, puedes modificar la condición isinstance para comprobar si el elemento es una cadena de texto o un número. Aquí tienes una versión actualizada de la función sum_all_numbers que puede manejar una lista anidada con cadenas de texto y números:

    def sum_all_numbers(seq):
        if not seq:
            return 0
        elif isinstance(seq[0], (str, int, float)):
            if isinstance(seq[0], str):
                # omitir las cadenas de texto y pasar al siguiente elemento
                pass
            else:
                # añadir todos los números a la suma y pasar al siguiente elemento
                return seq[0] + sum_all_numbers(seq[1:])
        elif isinstance(seq[0], list):
            return sum_all_numbers(seq[0]) + sum_all_numbers(seq[1:])
        else:
            # omitir otros tipos de elementos (por ejemplo, diccionarios, tuplas) y pasar al siguiente elemento
            pass
    

    En esta versión, la condición isinstance comprueba si el elemento es una cadena de texto o un número (int o float). Si el elemento es una cadena de texto, se omite y la función pasa al siguiente elemento. Si el elemento es un número, se suma a la suma y la función pasa al siguiente elemento. Si el elemento es una lista anidada, la función utiliza la recursión para sumar todos los números de la lista y añade el resultado a la suma.

    Con esta función actualizada, la entrada sum_all_numbers(["a", "b", ["c", 3, 4, [5, "d"], 10], 9]) devolvería 31, que es la suma de todos los números en la lista anidada.

Comments are closed.