作者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)
推 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