문자열을 입력 받아 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시해 문자열을 압축하여 표시해 보자.
입력 예시 : aaabbcccccca 출력 예시 : a3b2c6a1 |
def zip(sentence):
count = 0 # 문자를 세기 위한 변수
next = "" # sentence가 달라지는 곳을 감지하는 수단
result = "" # 결과를 저장하는 공간
for i in sentence:
if next != i:
next = i
if count:
result += str(count)
result += i
count = 1
else:
count += 1
if count:
result += str(count)
return result
첫번째 for문은 파라미터(parameter)로 전달받은 문장을 하나씩 출력한다.
a, a, a, b, b, c, c, c, c, c, c, a가 된다.
1. if next != i:
2. next = i
3. if count:
4. result += str(count)
5. result += i
6. count = 1
7. else:
8. count += 1
next = ""는 문자열이 달라지는 순간을 점검한다.
맨 처음에 들어오는 i는 a이다.
1번줄 : if next != i
next = " "
맨 처음 i = a
next != i 이기 때문에 if문 안으로 들어간다.
2번줄 : next = i
next는 a가 된다.
3번줄~ 4번줄
if count:
result += str(count)
count = 0이기 때문에 if는 False가 된다. 따라서 3번줄과 4번줄은 건너뛴다.
5번줄 : result += i
result는 빈 공백("")인데, a가 추가된다.
6번줄 : count = 1
여기서부터 count가 매겨지게 된다.
다음은 next == a이기 때문에 else문으로 넘어간다. 그래서 count는 2가 된다.
다음은 next == a이기 때문에 또 else문으로 넘어간다. 그래서 count는 3이 된다.
4번줄
b의 차례가 오면 next != b이기 때문에 if문으로 들어간다.
이때 count는 3이기 때문에 if count:는 True가 된다.
그다음 셌던 count를 result에 붙여버린다. 그래서 a3이 된다.
'프로그래밍 > 파이썬' 카테고리의 다른 글
[파이썬] 일등 함수(first-class citizen) 이란? (2) | 2017.05.19 |
---|---|
[파이썬] 리스트 컴프리헨션(list comprehension)의 이해 (1) | 2017.05.05 |
[파이썬] 행렬(matrix)과 리스트 컴프리헨션(list comprehension) 이해하기 (0) | 2017.05.05 |
집합(set), 시퀀스(sequence), 매핑(mapping) (0) | 2017.02.24 |
[파이썬] 리스트(list) append 메서드 사용시 NoneType이 출력되는 경우 (2) | 2017.02.18 |