作者ykjiang (York)
看板Python
标题Re: [问题] 卡关了...
时间Fri Dec 15 09:23:16 2006
※ 引述《ibmibmibm (杀.人.鬼)》之铭言:
: More pythontic way:
:
: import random
:
: times = 100
: history = [random.choice(('head', 'tail')) for i in range(times)]
: for i in history:
: print i
: print 'head:', history.count('head')
: print 'tail:', history.count('tail')
: 推 Freak1033:但是这样写吃 linear space 喔. XD 11/01 06:10
: 推 jtmh:times 不大的前提下,我觉得程式看起来清楚比较重要耶!? 11/01 16:05
: → jtmh:不然这样写不仅记忆体吃得多,就连执行速度也比较慢啊 @@? 11/01 16:06
要省记忆体,只要小小修改:
import random
N = 100
hist = (random.choice(('H', 'T')) for i in xrange(N))
m = {'H':0, 'T':0}
for e in hist:
m[e] += 1
print e
print 'head: ', m['H']
print 'tail: ', m['T']
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.59.12.144
※ 编辑: ykjiang 来自: 61.59.12.144 (12/15 09:51)
1F:推 Freak1033:这样还是 linear space 啊. XD 12/15 14:49
2F:推 ykjiang:list comprehensions [...] 跟 (...) 不同, 12/15 23:56
3F:→ ykjiang:[...] 会生成一个 list , (...) 则传回 generator 12/15 23:58
4F:→ ykjiang:道理类似 range(.) 跟 xrange(.) 的不同... 12/15 23:59
5F:→ ykjiang:如果还是不知道其花费 space 是 constant 的, 12/16 00:04
6F:→ ykjiang:请复习 generator 及 g = (..for...) 的用法 12/16 00:05
7F:推 jtmh:原来 list comprehension 有 (...) 这样的写法呀 o_O! 12/16 00:43
8F:→ jtmh:查了後发现是 2.4 版提供的,又学到一招了 :p 12/16 00:43