看板 Python 關於我們 聯絡資訊
※ 引述《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)
Freak1033:這樣還是 linear space 啊. XD 12/15 14:49
ykjiang:list comprehensions [...] 跟 (...) 不同, 12/15 23:56
ykjiang:[...] 會生成一個 list , (...) 則傳回 generator 12/15 23:58
ykjiang:道理類似 range(.) 跟 xrange(.) 的不同... 12/15 23:59
ykjiang:如果還是不知道其花費 space 是 constant 的, 12/16 00:04
ykjiang:請複習 generator 及 g = (..for...) 的用法 12/16 00:05
jtmh:原來 list comprehension 有 (...) 這樣的寫法呀 o_O! 12/16 00:43
jtmh:查了後發現是 2.4 版提供的,又學到一招了 :p 12/16 00:43