Today I Learned/Python & Pandas

[Python] Strip()은 공백만 제거해주지 않는다.

하나719 2020. 9. 23. 14:52
반응형

checkio 문제 참고: https://py.checkio.org/mission/beginning-zeros/solve/

 

문제 설명: 숫자로만 구성된 string에서 앞에 연속된 '0'이 몇개인가?

EX. '0012' -> 2개 / '1000' -> 0개 / '0300' -> 1개 

내 풀이 

  • 재귀호출 사용 (재귀호출 공부한 뒤로, 이런문제는 재귀호출로 풀게된다)

참고: 2020/09/18 - 파이썬 재귀호출로 반복문 줄이기

def beginning_zeros(number: str) -> int:
    # your code here
    if len(number) == 0 or number[0] != '0':
        return 0
    if number[0] == '0':
        return 1 + beginning_zeros(number[1:])

1등 풀이

  • checkio에서 가장 많은 좋아요를 받은 풀이를 보자
def beginning_zeros(number: str) -> int:
    return len(number) - len(number.lstrip('0'))

한줄로 끝난다 ^^..

lstrip() 을 사용해주었는데, strip() 예제로 공백제거하는것만 봤기 때문에 인자를 넣어주면 어떻게 동작하는건지

궁금해서 찾아보았다.

 

strip() , lstrip() ,rstrip() 비교

1) strip -> string 시작, 끝 부분의 공백을 없애준다.

2) lstrip -> string 시작 부분의 공백을 없애준다.

3) rstrip -> string 끝 부분의 공백을 없애준다.

 

strip('전달인자') 로 써보면?

1) strip -> string 시작, 끝 부분의 '0' (전달인자) 를 없애준다.

2) lstrip -> string 시작 부분의 '0'(전달인자)를 없애준다.

3) rstrip -> string 끝 부분의 '0'(전달인자)를 없애준다.

 

다시 1등 문제풀이를 보자

return len(number) - len(number.lstrip('0'))

number = '01234' 라고 하면, 

>  len(number) = 5

>  len(number.lstrip('0')) = 4

따라서 5-4 = 1 으로 정답이 된다.

 

string에 0이 총 몇 개인지 찾는 문제로 변형해보자

def all_zeros(number: str) -> int:
    return len(number) - len(number.strip('0'))

lstrip('0') 을 strip('0') 으로 바꿔주기만하면 끝!!

 

반응형