728x90
반응형
이번 포스트에서는 collections 라이브러리의 메소드 중에서 Counter 메소드를 사용하는 법을 알아보겠습니다.
Counter 메소드는 리스트나 문자열과 같은 자료형의 요소에서
값이 같은 요소가 몇 개인지 확인하는 용도로 사용합니다.
Counter 메소드의 연산 결과는 기본적으로 Key와 Value의 쌍으로 이뤄진 dictionary이므로
이를 통한 연산도 가능합니다.
이것을 예제를 통해 알아보겠습니다.
1) Counter 메소드 예제
import re
import collections
text = "1. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라 만세 무궁화 삼천리 화려 강산 대한 사람 대한으로 길이 보전하세 2. 남산 위에 저 소나무 철갑을 두른 듯 바람 서리 불변함은 우리 기상일세 무궁화 삼천리 화려 강산 대한 사람 대한으로 길이 보전하세3. 가을 하늘 공활한데 높고 구름 없이밝은 달은 우리 가슴 일편단심일세무궁화 삼천리 화려 강산대한 사람 대한으로 길이 보전하세4. 이 기상과 이 맘으로 충성을 다하여괴로우나 즐거우나 나라 사랑하세무궁화 삼천리 화려 강산대한 사람 대한으로 길이 보전하세"
words = re.findall(r'\w+', text)
print(words)
count = collections.Counter(words)
print(count)
cnt1 = collections.Counter(['a', 'b', 'b', 'c', 'd', 'a'])
cnt2 = collections.Counter(['a', 'd', 'c', 'a'])
print(cnt1)
print(cnt2)
print(cnt1 + cnt2)
print(cnt1 - cnt2)
print(cnt1 & cnt2)
print(cnt1 | cnt2)
코드를 알아보겠습니다.
우선 text 문자열은 기존에 많이 보던 애국가의 문자열입니다.
이를 re 라이브러리의 findall 메소드를 사용해 단어별로 쪼갰습니다.
실행 결과는 다음과 같습니다.
이렇게 단어별로 쪼개진 리스트를 words 변수에 담았고,
이 words 변수를 Counter 메소드에 넘겨주어 단어의 빈도수를 체크해보았습니다.
실행결과는 다음과 같습니다.
다음으로는 cnt1과 cnt2라는 변수가 있습니다.
각각 문자들이 담긴 리스트에 대해 Counter 메소드를 실행한 결과를 담고 있습니다.
실행결과를 확인해보면 다음과 같습니다.
위와 같은 결과에서 Counter 메소드의 실행값끼리 연산을 수행할 수 있습니다.
+ 연산의 경우 실행값을 더하여 반환합니다.
-연산의 경우 실행값을 빼서 반환합니다.
&연산의 경우 교집합 연산을 하고, | 연산의 경우 합집합 연산을 수행합니다.
728x90
반응형