2013-04-11 3 views
0

나는 시퀀스의 파스타 파일을 생성하기위한 프로그램을 가지고있다.파이썬에서 문자 목록 수정하기

input=['ARIMALTHNAEYSDSFTAL','ARIMFLTHNFEYSESFTAL','AHIMNPTENAEYHESFTAL','AHIMNPTENTEYWDSFTAL','AHIMNDTHNFEYHDSFTAL','AHIMNDTNNTEYWESFTAL','ARIMFDTENAEYHDSFTAL','AHIMADTNNTEYWDSFTAL','ARIMFLTENTEYHESFTAL'] 

l = len(input[0]) 

my_residues = [set() for _ in xrange(l)] 
for h in input: 
    for i, x in enumerate(h): 
     my_residues[i].add(x) 

my_residues = [list(x) for x in my_residues] 
print my_residues 

이이

[['A'], ['H', 'R'], ['I'], ['M'], ['A', 'N', 'F'], ['P', 'L', 'D'], ['T'], ['H', 'E', 'N'], ['N'], ['A', 'T', 'F'], ['E'], ['Y'], ['H', 'S', 'W'], ['E', 'D'], ['S'], ['F'], ['T'], ['A'], ['L']] 

같은 출력을 줄 것이다 그러나 나는 더 이상의 잔류 물을 포함하는 경우 모든 아미노산 잔기가 세트가되는 방식으로 출력을 할 수 있습니다. 당신은 my_residues을 구축 할 때 모든 아미노산 잔기를 추적해야합니다

[['A'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'], ['I'], ['M'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'], ['T'], ['A','C','D','E','F','G','H','I','K','L','M','N','P','Q','R','S','T','V','W','Y'],...... ['F'], ['T'], ['A'], ['L']] 

답변

1

당신은 루프 다시 목록을 만들 가능한 모든 아미노산 잔기의 목록 세트를 교체 할 때 다음 : 같은 그래서 출력이 보일 것입니다 길이가 1이 아닌 경우 :

import string 
all_residues = sorted(set(string.ascii_uppercase) - set('BJOUXZ')) 

my_residues=[set() for _ in xrange(len(input[0]))] 
for h in input: 
    for i, x in enumerate(h): 
     my_residues[i].add(x) 

my_residues=[list(x) if len(x) == 1 else all_residues for x in my_residues] 
print my_residues 

이 인쇄 :

[['A'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['I'], ['M'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['T'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['N'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['E'], ['Y'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['A', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'K', 'L', 'M', 'N', 'P', 'Q', 'R', 'S', 'T', 'V', 'W', 'Y'], ['S'], ['F'], ['T'], ['A'], ['L']] 
+0

그것 포기하지 않을 전체 잔류 – user2151414

+0

user2151414 @ : 당신은 ENL해야합니다 그때 가득 차있는 잔류 물을 얻는 방법에 나를 강조하십시오; 입력 샘플에는 'C'가 없습니다. 하드 코딩 할 수있는 목록일까요? –

+0

많은 잔류 물이 입력물에 없지만, 출력물에서 모든 잔류 물은 그 위치가 가변적 인 경우 거기에 있어야합니다. – user2151414