为什么在Cython中将列表转换为集合需要花费很多时间?

时间:2015-10-18 08:50:02

标签: python list set cython

huge_list参数类似于[[12,12,14],[43,356,23]]。我将列表转换为set的代码是:

cpdef list_to_set(list huge_list):
    cdef list ids
    cdef list final_ids=[]
    for ids in huge_list:
        final_ids.append(set(ids))

    return final_ids

我有2800个列表元素,每个元素有30,000个id。大约需要19秒。如何提高绩效?

编辑1:
而不是set我在unique中使用了numpy,而numpy加速了大约7秒:

df['ids'] = df['ids'].apply(lambda x: numpy.unique(x))

现在需要14秒(之前是~20秒)。我不认为这个时间是可以接受的。 :|

2 个答案:

答案 0 :(得分:1)

Cython无法加速任何事情。大部分时间都花在建筑物上,例如计算元素的哈希值并将其存储在地图中。这已经在C中完成,因此无法加速。纯python版本:

final_ids = [set(ids) for ids in huge_list]

会导致相同的结果。

答案 1 :(得分:0)

如果您只想将嵌套列表转换为设置,则只需使用map函数:

final_ids=map(set,huge_list)