본문 바로가기
프로그래밍 언어/Python 3

[Python 3] 중복 문자 세기

by Physics 2021. 12. 20.
728x90

특정한 문자열에 중복된 문자들이 몇 개 있는지 확인하는 문제를 푼다고 가정하자. 이런 경우, 아래와 같이 크게 2가지의 방법이 있다 [1, 2]. 개인적으로 시간이 된다면, [2]의 "kyrill"의 코멘트를 읽어보면 좋을 것 같다. 

1) count 메소드 이용하기 
2) collection 모듈의 Counter 사용하기 


 

1. count 메소드 이용하기

count 메소드는 python의 내장함수
- syntax: <list>.count(<char/str>)  
- returnn: <char> 혹은 <str>이 <list>에 중복되어 있는 횟수
- NOTE: 리스트의 크기가 크면 클수록, count를 사용하는 방법이 비효율적이 된다 [2]. 

>>> List = ["b", "a", "a", "c", "b", "a", "c",'a']
>>> counter_b=List.count('b')
>>> print(counter_b)
2

 

2. Collection 모듈의 Counter 이용하기

- 모듈: collection 
- 함수: counter 
- 리턴값: collection object, <class 'collection.Counter'>
- 해당 모듈 및 함수를 이용하면, 중복 문자의 빈도수와 대응되는 문자를 diectionary 형태의 리스트로 얻게 된다. 중복된 숫자를 얻는 방법은 Dictionary에서 key를 통한 value를 얻는 방법과 동일하다. (아래 참조)
- 해당 레퍼런스에 따르면, Collection 모듈의 Counter를 이용하는 것이 속도 면에서 굉장히 좋다는 것을 알 수 있다 [2]. 

>>> from collections import Counter
>>> a_string = 'the quick brown fox jumps over the lazy dog'
>>> collection = Counter(a_string)
>>> print(collection)
Counter({' ': 8, 'o': 4, 'e': 3, 't': 2, 'h': 2, 'u': 2, 'r': 2, 'q': 1, 'i': 1, 'c': 1, 'k': 1, 'b': 1, 'w': 1, 'n': 1, 'f': 1, 'x': 1, 'j': 1, 'm': 1, 'p': 1, 's': 1, 'v': 1, 'l': 1, 'a': 1, 'z': 1, 'y': 1, 'd': 1, 'g': 1})

>>> print(collection['a'])
>>> print(collection['e'])
1
3

 

Reference: 
[1] https://datagy.io/python-count-number-of-occurrences-in-a-string/    
[2] https://stackoverflow.com/questions/991350/counting-repeated-characters-in-a-string-in-python/993044

728x90

댓글