2

我是 Python n00b,冒着问一个基本问题的风险,我走了。

出于各种我不想讨论的原因,我将一些代码从 C 移植到 Python。

在 C 代码中,我有一些在下面重现的代码。

float table[3][101][4];
int kx[6] = {0,1,0,2,1,0};
int kz[6] = {0,0,1,0,1,2};

我想要下面的 C 代码的等效 Python 表达式:

float *px, *pz;
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;

有人可以通过给我Python中的等效表达式来帮助我吗?

4

2 回答 2

3

事情是这样的......你不能在python中做指针,所以你在这里展示的不是“便携”的,因为:

float *px, *pz;    <-- this doesn't exist
int lx = LX; /* constant defined somewhere else */
int lz = LZ; /* constant defined somewhere else */
px = &(table[kx[i]][0][0])+lx;
pz = &(table[kz[i]][0][0])+lz;
^    ^                      ^
|    |                      |
+----+----------------------+---- Therefore none of this makes any sense...

你想要做的是在你的多维数组中有一个指向某个偏移量的指针table,因为你不能在 python 中这样做,你不想逐字“移植”这个代码。

遵循除此之外的逻辑,您在做什么pxand pz?这是您尝试和移植需要了解的代码。

于 2013-07-18T15:43:00.570 回答
0

您的 C 代码没有直接的等价物,因为 Python 没有指针或指针算法。相反,重构您的代码以使用括号表示法索引到表中。

table[kx[i]][0][lx] = 3

将大致相当于 C

px = &(table[kx[i]][0][0])+lx;
*px = 3;

请注意,在 Python 中,您的表不会是连续的。特别是,虽然这可能适用于 C:

px[10] = 3; // Bounds violation!

这将在 Python 中出现 IndexError:

table[kx[i]][0][lx + 10] = 3
于 2013-07-18T15:44:12.770 回答