我想创建一个整数列表,作为 C++ 向量实现,并将其初始化为空(python)列表。然而,编译代码
from libcpp.vector cimport vector
cdef vector[int] s = []
Run Code Online (Sandbox Code Playgroud)
导致以下编译错误:prova.pyx:3:21: Cannot coerce list to type 'vector[int]'。
还
from libcpp.vector cimport vector
cdef vector[int] s
s = []
Run Code Online (Sandbox Code Playgroud)
导致同样的错误。
我能做些什么?
由于随着时间的推移,这个问题得到了很多人的关注,所以我们来回答一下,尽管它已经很旧了:
cdef vector[int] s
Run Code Online (Sandbox Code Playgroud)
自动初始化一个empty vector[int],它相当于一个空列表(例如print("empty" if not s else "filled")会打印“empty”)。
然而,由于cdef,s是一个 c++ vector,它不能与 aPyObject相互转换[]。这就是为什么赋值在 .pyx 中不起作用的原因。
C++ 向量和 python 列表之间的无缝转换仅发生在 python 脚本内(即在 .py 内,而不是.pyx 内),您将在其中导入返回或拥有 的内容s。