문장에서 정확히 K번 등장하는 모든 단어를 찾아 출력해야 하는 경우가 종종 있습니다. 파이썬에서는 split() 메서드로 문자열을 단어 리스트로 분리하고, count() 메서드로 각 단어의 등장 횟수를 확인한 뒤, 조건에 맞는 단어를 출력하고 remove() 메서드로 리스트에서 제거해 중복 출력을 방지하는 방식으로 간단하게 구현할 수 있습니다.
예제 코드
다음은 전체 동작 과정을 보여주는 예제입니다.
def key_freq_words(my_string, K):
my_list = list(my_string.split(" "))
for i in my_list:
if my_list.count(i) == K:
print(i)
my_list.remove(i)
my_string = "hi there how are you, how are u"
K = 2
print("The string is :")
print(my_string)
print("The repeated words with frequency", K, "are :")
key_freq_words(my_string, K)실행 결과
The string is : hi there how are you, how are u The repeated words with frequency 2 are : how are
코드 설명
key_freq_words라는 이름의 함수를 정의하고, 문자열과 키 값(K)을 매개변수로 받습니다.
문자열을 공백을 기준으로 분리(split)하여 리스트에 저장합니다.
리스트를 순회하면서 각 요소의 개수(count)가 키 값과 일치하면 콘솔에 출력합니다.
출력이 끝난 단어는 리스트에서 제거(remove)하여 같은 단어가 두 번 이상 출력되지 않도록 합니다.
함수 외부에서 예시 문자열을 정의하고 화면에 출력합니다.
찾고자 하는 빈도 값인 K를 2로 설정합니다.
문자열과 키 값을 인자로 넘겨 함수를 호출합니다.
조건에 맞는 단어(how, are)가 순서대로 콘솔에 출력됩니다.
더 안전한 대안: collections.Counter 활용
반복문 안에서 리스트 요소를 삭제하는 방식은 인덱스가 밀리면서 의도치 않은 동작을 유발할 수 있으므로, 실무에서는 collections.Counter를 사용하는 것이 더 안전하고 효율적입니다.
from collections import Counter
def key_freq_words_v2(my_string, K):
counts = Counter(my_string.split())
return [word for word, cnt in counts.items() if cnt == K]
my_string = "hi there how are you, how are u"
print(key_freq_words_v2(my_string, 2)) # ['how', 'are']Counter는 한 번의 순회만으로 모든 단어의 빈도를 계산하므로 시간 복잡도 면에서도 유리하며, 반복 중 수정 문제도 자연스럽게 피할 수 있습니다.