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?
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 quea
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 aList[float]
antes de concatenarlo cona
. Aquí hay un ejemplo de este último enfoque:Este código ahora se ejecutará sin errores y devolverá
[[0.0, 0.0, 0.0], [1.0, 1.3, 0.5]]
.