Python到C进行循环转换

时间:2014-09-11 04:47:13

标签: python c

我有以下python代码:

r = range(1,10)
r_squared = []

for item in r:
    print item
    r_squared.append(item*item)

如何将此代码转换为C?在C中有类似可变数组的东西,或者我将如何做与python追加相同的东西?

3 个答案:

答案 0 :(得分:3)

c中的简单数组c中的简单数组是Homogenous

int arr[10];
int i = 0;
for(i=0;i<sizeof(arr);i++) 
{ 
  arr[i] = i; // Initializing each element seperately 
}

尝试在C中使用vectors,请完成此link

/ vector-usage.c

#include <stdio.h>
#include "vector.h"

int main() {
  // declare and initialize a new vector
  Vector vector;
  vector_init(&vector);

  // fill it up with 150 arbitrary values
  // this should expand capacity up to 200
  int i;
  for (i = 200; i > -50; i--) {
    vector_append(&vector, i);
  }

  // set a value at an arbitrary index
  // this will expand and zero-fill the vector to fit
  vector_set(&vector, 4452, 21312984);

  // print out an arbitrary value in the vector
  printf("Heres the value at 27: %d\n", vector_get(&vector, 27));

  // we're all done playing with our vector, 
  // so free its underlying data array
  vector_free(&vector);
}

答案 1 :(得分:1)

默认情况下,C中的数组是可变的,因为你可以编写a[i] = 3,就像Python列表一样。

然而,与Python列表不同,它们是固定长度的。

对于你的问题,那应该没问题。你知道你想要的最终尺寸;只需创建该大小的数组,并分配给成员。

但是,当然 需要append存在问题。


为可附加数组编写一个简单的库(就像Python列表一样)对于C来说是一个非常好的学习项目。如果这是你想要的,你也可以找到很多现成的实现,但不是标准的库。

关键是不使用堆栈数组,而是使用malloc在堆上分配的内存。跟踪指向该内存的指针,容量和使用的大小。当使用的大小达到容量时,将其乘以某个数字(使用不同的数字来了解它们如何影响性能),然后realloc。这就是它的全部内容。 (如果你看一下CPython source for the list type,那基本上和它一样。)

这是一个例子。您希望添加一些错误处理(mallocrealloc可以返回NULL),当然还有append以外的其他API(尤其是{{} 1}}函数,它将在已分配的内存上调用delete,但这应该足以向您展示这个想法:

free

答案 2 :(得分:0)

c没有任何方法可以动态增加数组的大小,就像在python中一样。这里的数组是固定长度的

如果你知道你将要使用的数组的大小,你可以使用这种声明,比如

int arr[10];

或者如果您想要动态添加memery(在运行时),请使用malloc调用以及结构(链接列表)