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.

Error de mypy al agregar una lista de lista de enteros con una lista de lista de números flotantes.

Tengo una clase de python que se ve como sigue:

from typing import List
import numpy as np

class TestClass():

    def test(self) -> np.ndarray:
        a: List[List[float]] = [[1, 1.3, 0.5]]
        return np.array([[0,0,0]]+a)

En la práctica, esta función simplemente debería devolver [[0,0,0],[1, 1.3, 0.5]]. Sin embargo, mypy devuelve el mensaje de error Unsupported operand types for + ("List[List[int]]" and "List[List[float]]"). ¿Hay alguna razón en particular para esto?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una razón para este mensaje de error. El problema es que el primer elemento de la lista que se concatena con a en la declaración de retorno es [0,0,0], que es una lista de enteros, mientras que a es una lista de listas de flotantes (List[List[float]]). Intentar concatenar estos dos tipos distintos de listas usando el operador + produce un error.

    Para solucionar esto, puedes cambiar el primer elemento de la lista para que también sea una lista de flotantes ([[0.0, 0.0, 0.0]]) o puedes convertirlo explícitamente a List[float] antes de concatenarlo con a. Aquí hay un ejemplo de este último enfoque:

    from typing import List
    import numpy as np
    
    class TestClass():
        def test(self) -> np.ndarray:
            a: List[List[float]] = [[1, 1.3, 0.5]]
            return np.array([list(map(float, [0,0,0]))] + a)
    

    Este código ahora se ejecutará sin errores y devolverá [[0.0, 0.0, 0.0], [1.0, 1.3, 0.5]].

Comments are closed.