Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 문장에서 정확히 K번 등장하는 모든 단어 출력하기

문장에서 정확히 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는 한 번의 순회만으로 모든 단어의 빈도를 계산하므로 시간 복잡도 면에서도 유리하며, 반복 중 수정 문제도 자연스럽게 피할 수 있습니다.