파이썬3 기초적인 코드 질문 하나 드려봅니다.
조회수 1244회
파이썬3 공부중인 초보 학생입니다.
'aaabbccccca'이라는 문자열로부터 a3b2c6a1이라는 값을 출력하는 코드를 짜야 하는데 답안을 봐도 이해가 잘 되지 않아 질문 올려봅니다.
def compress_string(s):
_c=''
cnt=0
result=''
for c in s:
if c!=_c:
_c=c
if cnt: result += str(cnt)
result += c
cnt = 1
else:
cnt += 1
if cnt: result += str(cnt)
return result
print(compress_string('aaabbcccccca'))
첫번째 a 두번째 a의 풀이과정만 부탁드려봅니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
2 답변
-
문자열 전체를 한문자식 순회합니다.
한문자가 전에 검사한 문자와 같은지 확인합니다.
다르면 같은 문자열이 끝났으므로 result(문자) + 같을 때 카운트한 숫자를 합하여 a3 형태로 저장합니다.
같다면 카운트만 +1 합니다.
-
질문과는 무관할 수 있지만 다른식으로 구현한 예제를 올려봅니다.
import itertools s = 'aaabbccccca' groups = itertools.groupby(s) print([(c, len(list(group))) for c, group in groups]) # map(lambda group:(group[0], len(list(group[1]))), groups) 와 같이 할수도 있습니다. [('a', 3), ('b', 2), ('c', 5), ('a', 1)]
댓글 입력