2013-04-15 3 views
2

저는 파이썬에서 기본적인 문제로 고심하고 있습니다. 그것을 수정하기 위해 특정 위치에서 문자열을 읽어야합니다.문자열 위치 읽기

예 : 문자열의 경우 'abcd' 세 번째 위치를 읽으려고합니다 (두 번째는 실제로 0부터 시작하기 때문에) 다음 문자로 바꾸십시오. 'abdd'. 그러나 문자열이 'abrd' 일 경우 'absd' 등으로 변경해야합니다. 따라서 특정 위치에서 읽고 쓰고 나머지는 변경하지 않아야합니다. 세계에서 가장 단순한 것이어야하지만, 어떻게 할 수 없는지. 핵심 질문에 대한 대답에서

+0

질문을 좀 더 명확히해야합니다. ** 특정 위치 **에서 문자열을 변경 하시겠습니까? 예를 들어 세 번째 문자가 'r'또는 'c'와 관계없이 세 번째 위치를 변경하십시오. 아니면 찾고 계신가요? ** 문자열을'r'에 대해 검색 ** :'r'이 4 번째 위치를 바꾸면'c'가 3 번째 위치 등으로 바뀌면. – nqngo

+2

편지가 'z'이면 어떻게됩니까? 마지막 요소 대체는 – pcalcao

답변

2

은 간단하다 : 사용 목록 슬라이스 구문 :

>>> string='abcd' 
>>> print string[:2] + 'd' + string[3:] 
abdd 

당신은 당신은 다만 수, 그냥 문자열의 순서 값을 증가하는 것이 안전하다고 가정 할 경우 :

>>> string='abrd' 
>>> string=string[:2] + chr(ord(string[2]) + 1) + string[3:] 

귀하의 질문에 명시되지 않았으므로 귀하가 필요하다고 생각하겠습니다. 'z'에서 'a'로 루프를 돌리거나 다른 문자 케이스 또는 유니 코드 문자 세트로 특별히 처리하려는 경우 약간의 패치를 찾을 수 있습니다.

당신이을 경우

그냥 ord를 증가보다 더 복잡한 문제가, @kojiro 응답에서 따로 translation table

+1

입니다. 'string [3 :]'을 사용하는 것이 좋습니다. 'string'은 항상 네 글자가 될 수 없습니다. 마찬가지로,'string [0 : 2]'는'string [: 2]'로 단축 할 수 있습니다. – nqngo

+1

@ NhatNgo 그래서 편집되었습니다. – kojiro

+0

그게 좋습니다! 이제 어딘가에 있어야합니다. 감사합니다. –

1

을 사용하는 것이 좋습니다. 이 작업을 수행하는 또 다른 방법은 문자열목록으로 전환하고 다시 결합하는 것입니다. 예를 들어 서로 다른 문자를 대체해야하는 경우

S = 'abcd' 
// Convert to list 
L = list(S) 
// Change 3rd position 
L[3] = 'd' 
// Join it back and print 
print ''.join(L) 

그러나, 당신은 변환 과정을 쉽게하기 위해 사전 매핑을 정의 할 수 있습니다. 예를 들면 다음과 같습니다.

// Define {a -> x} mapping. 
M = {'c': 'd', 'r': 's'} 
// Substitution 
L[3] = M[L[3]] 
+0

감사합니다. 유용합니다. –