Skip to content

collections.Counter, most_common 아이템 개수 계산 {python}


원소들을 자동으로 계산해 주기 때문에 매우 편리함

a = [1, 2, 3, 4, 5, 5, 5, 6, 6]
b = collections.Counter(a)
b
# Counter({5:3, 6:2, 1:1, 2:1, 3:1, 4:1})

아래의 most_common 메서드는 인자로 들어온 개수만큼 카운트가 높은 놈들을 리턴한다.

b.most_common(2)
# [(5, 3), (6, 2)]

예제 문제#

https://leetcode.com/problems/most-common-word/

banned에 들어있지 않은 단어 중 가장 많이 카운트된 단어를 고르는 문제. 필터링 후 카운트 하는 방법을 사용하면 된다.

class Solution4:
    """
    banned가 list였기 때문에 필터링에서 오랜 시간이 걸렸던 것이다. 따라서 이를 set으로 바꿔줬더니 90ms -> 38ms로 바뀌었다.
    """

    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        banned_set = set(banned)
        normalized = "".join(c.lower() if c.isalnum() else " " for c in paragraph)
        words = normalized.split()
        filtered = filter(lambda w: w and w not in banned_set, words)
        counter = Counter(filtered)
        return counter.most_common()[0][0]