python之效率问题.
Tofloor
poster avatar
vala2012
deepin
2013-04-07 23:15
Author
  1. a = []
  2. for i in range(1, 1000000):
  3.     a.append(i)
  4. for i in range(1, 10000):
  5.     a.remove(i)
Copy the Code
测试一下代码吧,是不是卡住了,不过喝一杯水的功夫就OK了.才删除1万条而已... 大家发现没有,看来PYTHON在处理大数据面前就比较弱,有关于处理大数据方面的工作就不要用PYTHON,我现在都很无奈拉.
PYTHON在处理大数据面前,确实让人..... 很无奈.
Reply Favorite View the author
All Replies
leaeasy
deepin
2013-04-08 00:16
#1
楼主sb,试过xrange没有
Reply View the author
vala2012
deepin
2013-04-08 00:23
#2
楼主sb,试过xrange没有


看来 c/c++, 才是王道, 看来 数据结构,算法...在某种环境下是需要自己去写的. PYTHON不见那么智能.
由于为了兼容过多的东西,数据结构比较复杂,在某种方面就显得比较麻烦,
所以C/C++写的数据库系统就是证明这一点的.
我用1分钟写了一个简单的测试程序.
用链表来完成这样的事情,比较快,同样的事情,为何PYTHON怎么慢, 它的源码我没有看过, 我猜测应该是为了兼容很多操作,才导致的数据结构越来越复杂,性能也慢.
  1. #include
  2. #include
  3. struct TestList
  4. {
  5.     int data;
  6.     struct TestList *next;
  7. };
  8. int main(int argc, char *argv[])
  9. {
  10.     puts("==========开始测试=============");
  11.     struct TestList *test = (struct TestList*)malloc(sizeof(struct TestList));
  12.     struct TestList *point = (struct TestList*)malloc(sizeof(struct TestList));
  13.     test->next = NULL;
  14.     puts("============添加=================");
  15.     for (int i = 0; i <= 1000000; i++)
  16.     {
  17.         struct TestList *add_test = (struct TestList*)malloc(sizeof(struct TestList));
  18.         add_test->data = i;
  19.         if (test->next == NULL)
  20.         {
  21.             test->next = add_test;
  22.             point = add_test;
  23.         }
  24.         else
  25.         {
  26.             point->next = add_test;
  27.             point = add_test;
  28.         }
  29.     }
  30.     puts("============删除================");
  31.     for (int i = 0; i <= 10000; i++)
  32.     {
  33.         struct TestList *remove = test->next;
  34.         test->next = remove->next;
  35.         //printf("%d\n", remove->data);
  36.         free(remove);
  37.     }
  38.     test->next = NULL;
  39.     free(point);
  40.     free(test);
  41.     puts("===========测试完毕============");
  42.     return 0;
  43. }
Copy the Code
Reply View the author
lihongwu
deepin
2013-04-08 01:43
#3
楼主sb,试过xrange没有
看起来你们好像很熟的样子  :
Reply View the author
vala2012
deepin
2013-04-08 01:54
#4
[quote]楼主sb,试过xrange没有
看起来你们好像很熟的样子  :[/quote]
看起来大家都很熟的... :mrgreen:  :mrgreen:  :mrgreen:
Reply View the author
yfwz100
deepin
2013-08-25 00:31
#5
这个对比明显有问题啊。链表删除的只是最后一个元素,而python list默认的remove()方法是对比删除。如果删除有规律的话,这样 Python 也可以很快的:
  1. #!/usr/bin/env python
  2. a = [i for i in range(1,1000000)]
  3. for i in range(1, 1000000):
  4.   a.pop()
Copy the Code
Reply View the author