看板 Python 關於我們 聯絡資訊
好玩的是,非遞迴版調換迴圈順序後也變快幾近一倍: def gen1_2(n): L = [''] for i in xrange(n): L = [j+k for j in 'ATCG' for k in L] return L 所以現在非遞迴版比遞迴版快一倍 :) ※ 引述《ykjiang (York)》之銘言: : 其實遞迴版並不會比較慢,只要稍做調整: : def gen(n): : if n == 0: : return [''] : else: : return [x+y for x in gen(n-1) for y in 'ATCG'] : 改變迴圈的順序,這是很基本的最佳化作法... : ※ 引述《mantour (朱子)》之銘言: : : 測n=10時 : : def gen1(n): : : list=[''] : : for i in range(n): : : tmp=[j+k for j in list for k in 'ATCG'] : : list=tmp : : return list : : 3.949s : : 下面的版本在我的電腦上測n=10為17.545s -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.70.98.179
Arton0306:不太了解@@ 那這時內層迴圈不是較多嗎 怎麼變快了?? 10/27 02:04
ykjiang:可能是因為 in 'ATCG' 比 in L 耗運算吧,有空再驗證一下 10/27 12:22
rexrainbow:函數呼叫與迴圈哪個比較耗時呢? (我猜是函數呼叫) 10/27 12:24
ykjiang:果然是因為 in 'ATCG' ,它每個迴圈都要重建一個 list , 10/27 22:27
ykjiang:這很花時間,解法可先 I = list('ATCG') ,然後再用 in I 10/27 22:28