小编Han*_*ter的帖子

TypeError: isinstance() arg 2 必须是一个类型或类型的元组

如果你像我一样,你可能已经尝试过:

isinstance(my_var, [list, tuple])
Run Code Online (Sandbox Code Playgroud)

只得到:

TypeError: isinstance() arg 2 must be a type or tuple of types
Run Code Online (Sandbox Code Playgroud)

现在我完全理解了这个问题(错误信息很清楚)以及如何解决它。我也理解列表和元组之间的区别(可变与不可变)。

但是,我想了解的是 Python 解释器还允许将列表作为 isinstance arg 2 提供的权衡是什么?(无论如何,代码已经需要检查参数是标量还是元组)

如果你像我一样,它会节省很多不得不去应用修复的来回迭代,所以我很好奇是否有性能或其他原因让 Python 标准函数不混合接受列表和元组在这里?

python tuples immutability typeerror isinstance

5
推荐指数
0
解决办法
7084
查看次数

使用掩码和其他数组替换数组中的值

我有一个一维“from”数组(称为frm),其中包含具有关联布尔掩码数组的值:mask ” (与frm形状相同)。然后我有第三个“替换”数组:repl,也是一维的,但长度比其他两个短。

有了这些,我想生成一个新数组(" to "),其中包含frm值,但mask==True除外,在这种情况下,它应该按顺序获取 repl中的值。(请注意, mask中True元素的数量等于repl的长度)。

我一直在寻找一种“聪明的”numpy 方式来实现这个?我查看了np.wherenp.takenp.selectnp.choose等方法,但似乎没有一个“符合要求”?

“切入代码”,这就是我到目前为止所拥有的。它工作正常,但看起来不像“Numpythonic”?(甚至是Pythonic)

frm  = [1, 2, 3, 4, 5]
mask = [False, True, False, True, True]
repl = [200, 400, 500]
i = 0; to = []
for f,m in zip(frm,mask):
    if m:
        to.append(repl[i])
        i += …
Run Code Online (Sandbox Code Playgroud)

python arrays indexing numpy pandas

4
推荐指数
1
解决办法
6175
查看次数