반응형
리스트에 어떤 요소의 개수를 파악해야하는 때가 있습니다. (특히 코딩테스트에서 사용할 일이 많습니다) 그래서 오늘은 요소 개수를 세는 방법을 정리해보고자 합니다.
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 모듈의 장점은 쉽고 빠르게 답을 구할 수 있다는 것과 딕셔너리끼리 덧셈 뺄셈이 가능하다는 점입니다.
코딩테스트 처럼 빠르게 문제를 풀어야 할 경우 유용하게 사용할 수 있습니다.
반응형
'나는 이렇게 학습한다 > Language' 카테고리의 다른 글
Python _ isinstance로 타입을 체크하자. (0) | 2022.03.30 |
---|---|
JavaScript _ forEach로 배열 반복문 돌리는 방법 (0) | 2022.03.07 |
JavaScript _ 스프레드 연산자로 배열 합치기 (2) | 2022.03.05 |
JavaScript _ 'for문'으로 배열의 합을 구하는 방법 (0) | 2022.03.05 |
Python _ 딕셔너리 가져오기 메서드 정리 (0) | 2022.03.04 |