微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

了解 Python 中的 zip 函数并使其适应 C

如何解决了解 Python 中的 zip 函数并使其适应 C

我正在为 C 重写一段 Python 代码,但我遇到了作者使用 zip 函数的问题。请考虑以下事项:

def coords(step_size):
    for dz in (-step_size / 2,step_size / 2):
        for dx,dy in zip((-step_size / 2,step_size / 2,-step_size / 2),(step_size / 2,-step_size / 2,-step_size / 2)):
            yield dx,dy,dz

这个函数在循环中被调用,如下所示:

for dx,dz in coords(step_size):
    ....

如果我的理解是正确的,zip 通过组合传递的值创建一个 tulpa 迭代器对象,这个函数只是计算 dx,dz 的值,但我正在努力弄清楚这里到底发生了什么,我怎么能把它改编成 C。非常感谢你的帮助!

谢谢

解决方法

您的代码以特定顺序创建轴对齐立方体的八个顶点。在 C 中,或多或少忠实地呈现 Python 代码可能如下所示:

struct point {
    double x,y,z;
};

double s = 1.0;
const double zz[2] = {-s / 2,s / 2};
const double xx[4] = {-s / 2,s / 2,-s / 2};  // zipped list,left
const double yy[4] = {s / 2,-s / 2,right

struct point p[8];
unsigned n = 0;

for (unsigned i = 0; i < 2; i++) {
    for (unsigned j = 0; j < 4; j++) {
        p[n].x = xx[j];
        p[n].y = yy[j];
        p[n].z = zz[i];
        
        n++;
    }
}

C 没有生成器,所以他的代码只是填充一个数组。 Zip 可能看起来是在 Python 中实现这一目标的好方法,但 Python 不是 C,所以不要费心编写自己的 zip。更典型的 C 代码呈现可能如下所示:

struct point p[8] = {
    {-s / 2,-s / 2},{ s / 2,{-s / 2,s / 2},s / 2}
};
,

作为解释,zip() 返回一个从输入列表创建的新列表。新列表包含元组,其中第 n 个元组包含输入列表的第 n 个元素中的每一个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。