본문 바로가기
나는 이렇게 학습한다/Language

Python _ 리스트 요소 개수 세기(dictionary, collections)

by daco2020 2022. 3. 6.

리스트에 어떤 요소의 개수를 파악해야하는 때가 있습니다. (특히 코딩테스트에서 사용할 일이 많습니다) 그래서 오늘은 요소 개수를 세는 방법을 정리해보고자 합니다.

 

 

dictionary 사용

# 요소를 세고 싶은 리스트
>>> list = [1,2,3,4,5,5,5,5,5,1,1]

# 빈 딕셔너리를 생성
>>> dict = {}

# 요소가 딕셔너리에 있다면 += 1, 없다면 = 1
>>> for num in list:
	if num in dict: # dict.get(num)로 대체가능
	    dict[num] += 1
	else:
	    dict[num] = 1
        
        
# {요소(키): 개수(값)} 형태의 딕셔너리 생성
>>> dict
{1: 3, 2: 1, 3: 1, 4: 1, 5: 5}

기본 딕셔너리를 사용하는 베이직한 방법입니다. 굳이 모듈없이 답을 구하고 싶다면 사용할만 합니다.

 

 

 

collections 사용

# collections 모듈을 import 
>>> import collections



# 사용할 리스트 준비
>>> list_a = [1,2,3,1,2,3,4,1,2,3]
>>> list_b = [1,2,5,5,5,5,5,6,6,6]



# collections.Counter() 메서드에 리스트를 넣는다
>>> dict_a = collections.Counter(list_a)
>>> dict_b = collections.Counter(list_b)



# 확인해보면 Counter라는 타입에 묶인 딕셔너리가 생성된다
>>> dict_a
Counter({1: 3, 2: 3, 3: 3, 4: 1})
>>> dict_b
Counter({5: 5, 6: 3, 1: 1, 2: 1})



# 타입은 Couter 이다
>>> type(dict_a)
<class 'collections.Counter'>



# dict타입으로 바꿀 수는 없다
>>> dict(dict_a)
Traceback (most recent call last):
  File "<pyshell#40>", line 1, in <module>
    dict(dict_a)
TypeError: 'dict' object is not callable



# Counter타입은 dict타입과 다르게 덧셈 뺼셈이 가능하다
# 하지만 곱셉 나눗셈, 그리고 값이 'None'일때는 불가하다
>>> dict_a - dict_b
Counter({3: 3, 1: 2, 2: 2, 4: 1})
>>> dict_a + dict_b
Counter({5: 5, 1: 4, 2: 4, 3: 3, 6: 3, 4: 1})



# 기존 dict타입 문법은 사용가능하다
>>> dict_a[1]
3
>>> dict_a.get(1)
3
>>> dict_a.get(10,999)
999
>>> dict_a.setdefault(500)
>>> dict_a
Counter({1: 3, 2: 3, 3: 3, 4: 1, 500: None})

collections 모듈의 장점은 쉽고 빠르게 답을 구할 수 있다는 것과 딕셔너리끼리 덧셈 뺄셈이 가능하다는 점입니다.

 

 

코딩테스트 처럼 빠르게 문제를 풀어야 할 경우 유용하게 사용할 수 있습니다.