使用 mypy 将列表连接成数组

Concatenating lists into arrays with mypy

在使用 numpy 等库时,我经常编写如下代码:

import numpy as np
a = []
for j in range(10):
    # in a more general case you maybe perform some complex operation here that can't be
    # put into a list comprehension
    a.append(j)

a = np.asarray(a)

不幸的是 mypy 抱怨因为 a 的类型不能既是整数列表又是数组,并且使用 Union[List, np.ndarray] 并没有真正起作用,因为 append 没有数组不存在。 cast 在这里似乎也不起作用,或者至少我找不到任何有意义的方法来使用它。

我想避免将 a 注释为 Any 或添加 # type: ignore,这些用例是否有更简洁的解决方案?我想我最后可以只使用一个不同的变量,然后做 b = np.asarray(a) 但在这种情况下,垃圾收集器可能不会自动摆脱 a 并且我必须手动删除它,还有这个例如,如果我有一个 dict 列表并且我将这些列表连接成一个循环,将会很混乱,例如:

import numpy as np
a = { '0': [0, 1, 2], '1': [0, 1, 2]}

for k, v in a.items():
    v.append(3)
    a[k] = np.asarray(v)

一种解决方法是告诉 mypy 允许重新定义类型,或者通过使用带有 --allow-redefinition flag, or to set the allow_redefinition=True value in the config file

的命令行