如果任何参数是np.ndarray
,我的函数需要采用不同的路径。我正在查看isinstance
。但我想知道是否可能有更直观(更快速)的方式,而不是将列表理解与any
一起使用:
def func(a, b):
if any([isinstance(i, np.ndarray) for i in [a, b]]):
...
else:
...
我已经尝试过:
if isinstance([a, b], np.ndarray):
但这不起作用,因为[a, b]
是list
...
答案 0 :(得分:3)
实际上使用any
是最pythonic的方式,因为它已经在python中实现,如下所示:
def any(iterable):
for element in iterable:
if element:
return True
return False
在迭代中遇到True项后会立即返回True
,因此在最佳情况下,它的顺序为O(1),最差情况为O(n)。关于isinstance()
内置函数,它是检查对象类型的pythonic方法。
同样作为一种更加pythonic的方式,你最好将生成器表达式传递给any
并让生成器函数按需生成项目,而不是列表理解并立即创建所有布尔值。:
any(isinstance(i, np.ndarray) for i in [a, b])
正如@Padraic所说,如果你只处理两个项目,最好的方法是使用or
运算符:
if isinstance(a, np.ndarray) or isinstance(b, np.ndarray):
# do stuff