2015-04-23 63 views
0

我不是很有經驗的Python和我的腳本提供了以下錯誤的可能修改的列表:創建序列

"invalid syntax in line 4" 

我沒有看到的原因,也許有人可以提供幫助。

我試圖創建一個序列的所有可能的修改列表(如SEQWKST)。如果該字母爲"S",則修改爲"phos"。如果這封信是"K"有三種可能的修改:"dimeth""meth""ac"

我想創建一個可能的修改的列表和它們的位置

(eg: 
1,phos 
4,ac 
4,meth 
4,meth...) 

#!/bin/python 

def createPTM (SEQWKST): 
    PTMlist = [] 
    pos = 0 
    for N in SEQWKST: 
     pos += 1 
     if N == "Y": 
      PTM = phos 
      PTM_list.extend(pos,PTM) 
     elif N=="S": 
      PTM = phos 
      PTMlist.extend(pos,PTM) 
     elif N=="T": 
      PTM = phos 
      PTMlist.extend(pos,PTM)  
     elif N=="R": 
      PTM = meth 
      PTM_2 = dimeth 
      PTMlist.extend(pos,PTM) 
      PTMlist.extend(pos,PTM_2) 
     elif N=="K": 
      PTM = meth 
      PTM_2 = dimeth 
      PTM_3 = ac 
      PTMlist.extend(pos,PTM) 
      PTMlist.extend(pos,PTM_2) 
      PTMlist.extend(pos,PTM_3)  
    return PTM_list 
    print PTM_list  
+0

這是對整個* *文件?如果不是,它在第​​4行的樣子是什麼? – Kevin

回答

2

有,其實,您的代碼有幾個問題,但第4行中的SyntaxError似乎不是其中的一個。

請注意,extend接受一個參數(某種類型的序列),並用該序列擴展給定列表,因此您需要使用例如PTM_list.extend((pos,PTM))

你沒有定義phos,meth等,但我猜這些應該是字符串對象?

print PTM_list超出您的函數定義,它不在範圍內。我猜你要打印的返回值create_PTM

嘗試:

#!/bin/python 

def createPTM (SEQWKST): 
    PTM_list = [] 
    pos = 0 
    for N in SEQWKST: 
     pos += 1 
     if N == "Y": 
      PTM = 'phos' 
      PTM_list.extend((pos,PTM)) 
     elif N=="S": 
      PTM = 'phos' 
      PTM_list.extend((pos,PTM)) 
     elif N=="T": 
      PTM = 'phos' 
      PTM_list.extend((pos,PTM)) 
     elif N=="R": 
      PTM = 'meth' 
      PTM_2 = 'dimeth' 
      PTM_list.extend((pos,PTM)) 
      PTM_list.extend((pos,PTM_2)) 
     elif N=="K": 
      PTM = 'meth' 
      PTM_2 = 'dimeth' 
      PTM_3 = 'ac' 
      PTM_list.extend((pos,PTM)) 
      PTM_list.extend((pos,PTM_2)) 
      PTM_list.extend((pos,PTM_3)) 
    return PTM_list 

print createPTM('YSRKT') 

一個更Python的方法是使用一個字典,而不是if..elif並定義一個函數來完成你的專業列表擴展:

#!/bin/python 

def createPTM (SEQWKST): 
    PTM_list = [] 

    def extend_PTM_list(pos, PTMs): 
     for PTM in PTMs: 
      PTM_list.extend((pos, PTM)) 

    d = {'Y': ['phos'], 
     'S': ['phos'], 
     'T': ['phos'], 
     'R': ['meth', 'dimeth'], 
     'K': ['meth', 'dimeth', 'ac'] 
     } 


    for pos, N in enumerate(SEQWKST, start=1): 
     extend_PTM_list(pos, d[N]) 

    return PTM_list 

print createPTM('YSRKT') 

輸出(例如):

[1, 'phos', 2, 'phos', 3, 'meth', 3, 'dimeth', 4, 'meth', 4, 'dimeth', 4, 'ac', 5, 'phos'] 
+0

非常感謝,現在的代碼好多了。看起來我運行代碼時犯了一個錯誤,現在沒有錯誤消息 – Evve