先贴一段代码:
#!/usr/bin/env python
import sys
import random
m = [[0 for x in range(128)] for y in range(128)]
for i in range(1000):
m[random.randint(0,127)][random.randint(0,127)] = 1
f = file('foo.pbm','w')
sys.stdout = f
print "P1\n128 128"
for i in range(128):
for j in range(128):
print m[i][j],
print
f.close()
再扯一扯题外话,这里,有一个问题,”掷 30 次硬币,至少出现一次“连续 7 次正面”的概率有多少?”,本来以为挺简单的,不过似乎又不是那么简单,谁来算一算告诉俺怎么算。
上面的文章中有C写的一段代码,生成一个pbm的图像,挺有意思的,俺就顺手写了一个Python版的,调用了文件操作就不用手动重定向了。
上面的Python代码中用到了一句生成”二维数组“,这里用这个词有点不太准备,因为Python里面是没有数组的,只有list。
map1 = [[0 for x in range(128)] for y in range(128)]
看起来是一种比较简单的实现一个”二维数组“的方法,不过还有更简单的:
map2 = [[0]128]128
map1 == map2的结果是True,不过第二种定义方式存在问题,请看这里。
还有一种定义方式:
map3 = map(lambda : [0] * 128, range(128))
这里lambda中 ”“其实只是一个普通的变量,接下来就好理解了,这种方式也比较可靠。
Comments
luguo: 怎么感觉最后那种方式走了Perl路线?? ;-)
luguo: 还有,map是Python的内置函数啊!你怎么用它来命名list呢?
cocobear: Perl的路线? 我觉得很pythonic的。
Amankwah: 现在专攻Python?
cocobear: Python是个好东东。
cocobear: 那个map变量已经改了:-)