免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3278 | 回复: 6
打印 上一主题 下一主题

List与tuple中的for语法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-13 21:18 |只看该作者 |倒序浏览
今天调试程序是发现的

  1. a = [(x,y,z) for x in range(512) for y in range(512) for z in range(512)]
  2. print a
复制代码

  1. [(0,0,0),(0,0,1),(0,0,2),....]
复制代码

跑死机了

  1. a = ((x,y,z) for x in range(512) for y in range(512) for z in range(512))
  2. print a
复制代码

  1. <generator object at 0x987c48c>
复制代码

Python 生成了一个generator对象!!不需要给a分配大量内存了

论坛徽章:
0
2 [报告]
发表于 2008-10-13 22:19 |只看该作者
这个……怎么用?还以为会生成tuple……

论坛徽章:
0
3 [报告]
发表于 2008-10-14 10:51 |只看该作者
真牛,头次看见,没有哪个资料上面说到。

论坛徽章:
0
4 [报告]
发表于 2008-10-15 08:41 |只看该作者
呵呵,不错

论坛徽章:
0
5 [报告]
发表于 2008-10-15 11:43 |只看该作者
Tuple是不可变的list, 所有不能用这种方法动态来增加Tuple里面的元素

要生成这样的Tuple,可以先生成list, 然后用tuple函数

[ 本帖最后由 hbsld 于 2008-10-15 11:46 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-10-15 15:02 |只看该作者
原帖由 hbsld 于 2008-10-15 11:43 发表
Tuple是不可变的list, 所有不能用这种方法动态来增加Tuple里面的元素

要生成这样的Tuple,可以先生成list, 然后用tuple函数


没看懂你的意思
俺只是想遍历空间中的每一个点,如果使用3层for循环的话,代码会比较难看,但是如果使用list,又要给list分配很大的内存
使用tuple的话,我们得到的是一个generator,可以完成遍历的任务,又不需要分配打内存损失性能,代码看起来也舒服
三层循环

  1. for x in range(512):
  2.     for y in range(512):
  3.         for z in range(512);
  4.             do_somthing(x,y,z)
复制代码


使用list

  1. for p in [(x,y,z) for x in range(512) for y in range(512) for z in range(512)]:
  2.     do_somthing(p);
复制代码


使用generator

  1. for p in ( (x,y,z) for x in range(512) for y in range(512) for z in range(512) ):
  2.     do_somthing(p);
复制代码

论坛徽章:
0
7 [报告]
发表于 2008-10-15 21:19 |只看该作者
不好意思,一是我理解错了你的意思,二是我对python的认识不够,不知道什么是generator。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP