2015-01-03 5 views
-2

저는 파이썬 초보자이며 파이썬 2.7을 사용하고 있습니다.위치를 사용하여 문자열에서 문자를 추출하십시오.

나는 DNA 서열 (문자열 dna)을 가지고 있으며 DNA 문자열의 위치에 따라 문자를 추출해야합니다. 위치는 sequence 문자열로 정의됩니다. 여기서 점 앞에있는 첫 번째 숫자는 dna 문자열에서 추출 할 첫 번째 문자를 가리키고 두 번째 숫자는 마지막 문자를 나타냅니다.

저는 이것을 파이썬 프로그램을 가능한 단순하게 유지하면서 루프를 사용해야합니다. 코드를 작성하려고 며칠을 보냈는데 제대로 작동하지 못했습니다. 여기까지 내가 한 일은 있지만 작동하지 않습니다. 어떤 도움이 필요합니까?

dna='abcde'  
sequence=' 0..2, 4..5, 4..5' 
import re  
b=re.finditer('([0-9]{1}\.\.([0-9]{1}))', sequence)  
for j in b:   
    print int(j.group(2))  
a=re.finditer('(([0-9]{1})\.\.[0-9]{1})', sequence)  
for f in a:  
    print int(f.group(2))  
for element in sequence:  
    print dna[int(f.group(2)):int(j.group(2))]  
+2

위에 표시된 입력에 따라 예상 출력이 어떻게 표시되는지 예를 보여주세요. –

+0

@AmitKumarGupta. 예상 출력은 다음과 같아야합니다. ab e e ab는 0..2와 e에서 4..5를 나타냅니다. – Dang

+0

예상되는 출력은 "ab e e ab"여야합니다? 뭐? 거기에 구두점이 누락되었다고 가정합니다. 적절한 문법, 문장 부호 등을 사용하여 시간을내어 가능한 한 쉽고 혼란스럽지 않도록 도와주십시오. –

답변

0

어떤 약을 .. :

dna='abcde'  
sequence=' 0..2, 4..5, 4..5' 
import re  
b=re.finditer(r'([0-9]+)\.\.([0-9]+)', sequence)  
for j in b:   
    print dna[int(j.group(1)) : int(j.group(2))] 
,210

이 파이썬에서, 마지막 인덱스를 제외, 슬라이스 이후

ab 
e 
e 

를 인쇄합니다. 대신, abcef보고 싶다면 바로이 print

print dna[int(j.group(1)) : int(j.group(2)) + 1] 

즉에, 바로 슬라이스 구문의 오른쪽 부분에 1을 추가로 변경합니다.

0

당신은 당신의 패턴 전에 r를 생략 :

>>> b=re.finditer(r'([0-9]{1}\.\.([0-9]{1}))', sequence) 
>>> for j in b: 
... print int(j.group(2)) 
... 
5 
5 

그러나 분할에 대한 당신이 목록의 이해와 str.split() 사용할 수있는 정규식을 필요가없는 순서

:

>>> l=[i.split('..') for i in sequence.split(',')] 
>>> [(int(i),int(j)) for i,j in l] 
[(0, 2), (4, 5), (4, 5)] 

>>> for i,j in indices : 
... print dna[i:j] 
... 
ab 
e 
e 
+0

'print int (j.group (1))'이 작동하지 않습니다. 확인 했니? – aerokite

+0

@AerofoilKite 오타 였고 고정되었습니다. – Kasramvd

0
import re 
dna='abcde'  
sequence='0..2, 4..5, 4..5' 
positionlist = sequence.split(", ") #splits string on, and puts parts in list 
dnalist = list(dna) #splits to seperate letters 
for i in xrange(len(positionlist)): #make an array of arrays (last array has 2 values, start and stop) 
    range1 = positionlist[i].split("..") 
    range1 = map(int,range1) #convert from string to integer 
    print dnalist[range1[0]:range1[1]] 

이것은 정규식이없는 구현입니다. 가장 쉬운 방법은 아닐지 모르지만 나는 너와 마찬가지로 초보자이기도하다.

관련 문제