一篇文章引发的思考

先贴一段代码:

#!/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变量已经改了:-)

坚持原创技术分享,您的支持将鼓励我继续创作!