您可以使函数采用可调用参数,该参数将在列表理解的条件部分中使用。然后,您可以使用lambda或其他函数对象传递您的任意条件:
def indices(a, func):
return [i for (i, val) in enumerate(a) if func(val)]
a = [1, 2, 3, 1, 2, 3, 1, 2, 3]
inds = indices(a, lambda x: x > 2)
>>> inds
[2, 5, 8]
它与您的Matlab示例更加接近,而无需加载所有numpy。