【问题标题】:Why converting list into set in Cython does not work?为什么将列表转换为 Cython 中的集合不起作用?
【发布时间】:2015-10-18 07:41:51
【问题描述】:

我想要实现的是将list转换成set并返回结果:

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',)

为什么它应该是一个元组,为什么它需要一个集合而不是一个列表,因为我一直在发送一个列表?


编辑 1:

为了简单起见,我使用了下面的函数并得到了同样的错误:

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

【问题讨论】:

    标签: python list set cython


    【解决方案1】:

    () 是一个元组文字;类型声明和实际值的类型不匹配。您需要改用set()

    cdef set final_ids = set()
    

    【讨论】:

    • 通常需要大约 19 秒才能将列表变为集合!没有办法改善吗?
    • @AlirezaHos,您可以将final_ids.update(set(ids)) 更改为final_ids.update(ids),因为set.update 接受任何可迭代对象。
    • 我应该提到final_ids 是一个集合列表,因此将其更改为cdef list final_ids = [],然后将集合添加到此列表中。
    • @AlirezaHos,你能发布另一个更新内容的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 2018-10-14
    • 2021-08-15
    • 1970-01-01
    • 2016-07-14
    • 2011-01-29
    • 1970-01-01
    相关资源
    最近更新 更多