2010-02-24 59 views
5

我試圖創建一個給定蛋白質序列的可能的密碼列表。在python中使用itertools.product和列表3

基本上,我試圖創建的腳本將處理給定的字符串輸入,並輸出輸入表示的另一組字符串的可能組合。例如,字符'F'表示'UUU'或'UUC';或者'U'表示'UUU'或'UUC'。字符'I'代表'AUU','AUC'或'AUA'。給定輸入'FI',我試圖創建的腳本應輸出: 'UUUAUU','UUUAUC','UUUAUA','UUCAUU','UUCAUC'和'UUCAUA'。

我目前仍堅持這一代碼:

import itertools 

F = ['UUU', 'UUC'] 
I = ['AUU', 'AUC', 'AUA'] 

seq, pool = 'FI', [] 

for i in seq: 
    pool.append(eval(i)) 

for n in itertools.product(pool): 
    print(n) 

它的工作原理,當我在itertools.productpool[0], pool[1]取代pool。但我無法弄清楚如何使它工作,以便用戶可以輸入超過2個字符的字符串(即不要硬編碼)。

在此先感謝您的幫助!

回答

6

您可以使用*pool來「解壓」列表中調用product()時:

for n in itertools.product(*pool): 
    print(n) 

這句法擴展列表pool到單獨的位置參數。

2

itertools.product(池[0],池[1],...池[長度(池)-1])等效於itertools.product(*池)

import itertools 

F = ['UUU', 'UUC'] 
I = ['AUU', 'AUC', 'AUA'] 

pool=[F,I] 

for n in itertools.product(*pool): 
    print(''.join(n))