2015-10-18 77 views
2

我想實現的是list轉換成set並返回結果:爲什麼在Cython中將列表轉換爲集合不起作用?

cpdef list_to_set(list huge_list): 
    cdef list ids 
    cdef set final_ids=() 
    for ids in huge_list: 
     final_ids.update(set(ids)) 

    return final_ids 

我這樣稱呼它:

from core import list_to_set 
. 
. 
. 
list_to_set.list_to_set(list(dataframe['ids'].values)) 

我得到下面的錯誤:

TypeError('Expected set, got tuple',) 

爲什麼它應該是一個元組以及它爲什麼期望一個不是列表,因爲我一直在發送一個列表?


EDIT 1:

爲了簡單我用下面的函數,得到了相同錯誤的問題:

list_to_set.list_to_set([[12,14], [5,6]]) 

回答

1

()是字面的元組;類型聲明和實際值的類型不匹配。您需要使用set()代替:

cdef set final_ids = set() 
+0

通常需要大約19秒才能將列表變爲集合!沒有辦法改進它嗎? – ALH

+0

@AlirezaHos,你可以將'final_ids.update(set(ids))'改成'final_ids.update(id)',因爲'set.update'接受任何可迭代的。 – falsetru

+0

我應該提到'final_ids'是一組列表,因此將其更改爲'cdef list final_ids = []',然後將集合添加到此列表中。 – ALH

相關問題