如何使用numba操作列表生成器

时间:2018-01-05 17:46:44

标签: python numba

我正在尝试使用一个尝试使用numba和list生成器的简单代码,并且在执行以下代码时出错。

@numba.jit(nopython=True, nogil=True)
def perform_search(simple_list, number):
    gen = (ind for ind in xrange(len(simple_list)) if simple_list[ind] != number)
    return next(gen)

x = [1,1,1,2,1,3]
perform_search(x, 1)

当我执行上面的代码时,我得到一个ValueError,但是,当只使用装饰器@numba.jit时,我得到一个LoweringError

请帮我使用生成器(或其他方式)执行此简单搜索。提前致谢

1 个答案:

答案 0 :(得分:3)

你有什么

gen = (ind for ind in xrange(len(simple_list)) if simple_list[ind] != number)

是一个生成器表达式,目前numba不支持。

如果您使用方括号,例如:

gen = [ind for ind in xrange(len(simple_list)) if simple_list[ind] != number]

然后它是列表理解,numba可以支持它。通过此更改,genlist,您可以将其编入索引(即gen[0])。

已编辑:

以下代码是用户sklam in gitter的建议,我在这里更新。

@numba.jit(nopython=True)
def the_gen(simple_list, number):
    for ind in range(len(simple_list)):
        if simple_list[ind] != number:
            yield ind


@numba.jit(nopython=True, nogil=True)
def perform_search(simple_list, number):
    for i in the_gen(simple_list, number):
        print(i)

如果你采用上述方法,你将能够使用生成器(因此获得内存和时间),因为numba目前不支持generator-expression。