在C中使用python的list对象,如何进行操作?试了N遍.如何都弄不好,求各位支支招!

在C中使用python的list对象,怎么进行操作?!试了N遍..怎么都弄不好,求各位大虾支支招!!
在 static PyObject *wrap_md(PyObject *self, PyObject *args) //PYTHON的C语言扩展模块

中定义了一个新的PyObject *, 而且是个LIST:

  PyObject *xforce = PyList_New(TN); // int TN
  //这里有一个问题,TN是从PYTHON读入的一个变量,可以这么定义吗?如果不行,怎么办?

然后,我就要对其进行操作了:

  for (a = 0; a < TN;a++){
PyList_Insert(xforce, a, PyFloat_FromDouble(xForces(a)));}
  //xForces()是之前定义的一个函数,返回double值。
  //我想把它转换成 PyFloat 对象,可是就是不行!!结果只有 最后一个(即a=TN-1时)非零,其他的全是零。
  //我也尝试过使用PyBuildValue(),结果一样跟上面一样。
  //试过在Insert前增加计数 Py_INCREF(xforce),结果还是不对。

我验证了,设了一个 double test; test = xForces(i) // i为随便的一个int数,不循环,不插入List里,返回到Python是正确的。这说明我的xForces函数没有写错,返回的double值是正确的。。。

那问题就是出在这个PyList_Insert上。。试了N遍。。。什么增加计数,减少计数都不能。。(在FOR循环里,增加计数后,会变成全零,减少计数后无法运行,直接崩溃)

郁闷了。。。怎么也调试不出来。。。各位大虾帮我看看吧。。谢谢!!

------解决方案--------------------
*xforce = PyList_New(TN)估计是这TN值的问题,非0一般紧接着多是用PyList_SetItem()设值。如果直接用PyList_Insert,先前长度应该设0,或者是一个已经存在的列表。
------解决方案--------------------
试了一下有数据呀。xpos = PyList_New(TN)等后6行没必要,参数paser后指针会赋新值,那么之前的新生对象就找不到了白占了空间。Py_BuildValue("d"...等换前一行写,用个变量记住,下行插入后计数就要减少...

print md_c.md(3, 1.0, 2.0, 
[1.0,2.0,3.0],[4.0,2.0,1.0],[2.0,4.0,6.0],
[1.1,2.2,3.3], [1.4,3.5,3.2],[3.1,3.2, 4.1])

得到:
(78.037938569161668, -0.012061430838336079, 78.049999999999997, [2.100465102988788, 3.2018474779342081, 4.297687419077004, 1.0, 2.0, 3.0], [5.3990740354441407, 7.4986091422111461, 7.2023168223447129, 4.0, 2.0, 1.0], [5.1009302059775763, 5.203694955868416, 6.095374838154008, 2.0, 4.0, 6.0], [1.1047049683851307, 1.2536844307938115, 0.94161060082105796, 1.1000000000000001, 2.2000000000000002, 3.2999999999999998], [1.4060996700032273, 1.3504456327722558, 1.4434546972245166, 1.3999999999999999, 3.5, 3.2000000000000002], [3.1016755373417237, 3.2295971097787142, 2.9687273528795624, 3.1000000000000001, 3.2000000000000002, 4.0999999999999996], [0.0018604119551523779, 0.0073899117368312435, -0.009250323691983621], [-0.0037038582234350296, -0.0055634311554183177, 0.0092672893788533477], [0.0037208239103047559, 0.014779823473662487, -0.018500647383967242])