2008年04月23日

先贴一段代码:

:
  1. #!/usr/bin/env
  2.  
  3. import sys
  4. import random
  5.  
  6.  
  7. m = [[0 for x in range(128)] for y in range(128)]
  8.  
  9. for i in range(1000):
  10.         m[random.randint(0,127)][random.randint(0,127)] = 1
  11.  
  12.  
  13. f = file('foo.pbm','w')
  14. sys.stdout = f
  15.  
  16. print "P1\n128 128"
  17. for i in range(128):
  18.         for j in range(128):
  19.                 print m[i][j],
  20.         print
  21. f.close()

再扯一扯题外话,这里,有一个问题,"掷 30 次硬币,至少出现一次“连续 7 次正面”的概率有多少?",本来以为挺简单的,不过似乎又不是那么简单,谁来算一算告诉俺怎么算。

上面的文章中有C写的一段代码,生成一个pbm的图像,挺有意思的,俺就顺手写了一个版的,调用了文件操作就不用手动重定向了。

上面的代码中用到了一句生成”二维数组“,这里用这个词有点不太准备,因为里面是没有数组的,只有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中 ”_“其实只是一个普通的变量,接下来就好理解了,这种方式也比较可靠。

标签 :

6 楼了已经

  • luguo写于08年04月23日

    怎么感觉最后那种方式走了Perl路线?? ;-)

  • luguo写于08年04月23日

    还有,map是Python的内置函数啊!你怎么用它来命名list呢?

  • cocobear写于08年04月23日

    Perl的路线?
    我觉得很pythonic的。

  • cocobear写于08年04月23日

    那个map变量已经改了:-)

  • Amankwah写于08年04月23日

    现在专攻Python?

  • cocobear写于08年04月23日

    Python是个好东东。

发表评论

在下面加入你的评论,或者 trackback 从你的博客站点。 订阅本文的评论。

:

:

:

« wget中文乱码
» Python-Challenge-1