如果你像我一样,你可能已经尝试过:
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 标准函数不混合接受列表和元组在这里?
我有一个一维“from”数组(称为“ frm ”),其中包含具有关联布尔掩码数组的值:“ mask ” (与frm形状相同)。然后我有第三个“替换”数组:“ repl ”,也是一维的,但长度比其他两个短。
有了这些,我想生成一个新数组(" to "),其中包含frm值,但mask==True除外,在这种情况下,它应该按顺序获取 repl中的值。(请注意, mask中True元素的数量等于repl的长度)。
我一直在寻找一种“聪明的”numpy 方式来实现这个?我查看了np.where、np.take、np.select、np.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 ×2
arrays ×1
immutability ×1
indexing ×1
isinstance ×1
numpy ×1
pandas ×1
tuples ×1
typeerror ×1