나는 이렇게 학습한다/Language

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

daco2020 2022. 3. 6. 09:12
반응형

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

 

 

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

 

 

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

 

 

 

 

 

반응형