List与tuple中的for语法

List与tuple中的for语法

今天调试程序是发现的

[Copy to clipboard] [ - ]
CODE:
a = [(x,y,z) for x in range(512) for y in range(512) for z in range(512)]
print a



[Copy to clipboard] [ - ]
CODE:
[(0,0,0),(0,0,1),(0,0,2),....]

跑死机了

[Copy to clipboard] [ - ]
CODE:
a = ((x,y,z) for x in range(512) for y in range(512) for z in range(512))
print a



[Copy to clipboard] [ - ]
CODE:
<generator object at 0x987c48c>

Python 生成了一个generator对象!!不需要给a分配大量内存了
这个……怎么用?还以为会生成tuple……
真牛,头次看见,没有哪个资料上面说到。
呵呵,不错
Tuple是不可变的list, 所有不能用这种方法动态来增加Tuple里面的元素

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



QUOTE:
原帖由 hbsld 于 2008-10-15 11:43 发表
Tuple是不可变的list, 所有不能用这种方法动态来增加Tuple里面的元素

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

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

[Copy to clipboard] [ - ]
CODE:
for x in range(512):
    for y in range(512):
        for z in range(512);
            do_somthing(x,y,z)

使用list

[Copy to clipboard] [ - ]
CODE:
for p in [(x,y,z) for x in range(512) for y in range(512) for z in range(512)]:
    do_somthing(p);

使用generator

[Copy to clipboard] [ - ]
CODE:
for p in ( (x,y,z) for x in range(512) for y in range(512) for z in range(512) ):
    do_somthing(p);

不好意思,一是我理解错了你的意思,二是我对python的认识不够,不知道什么是generator。