본문 바로가기

Coding Test

05. 리스트, 딕셔너리

리스트

<리스트의 주요 연산 시간 복잡도>

<리스트 활용 방법>

- 리스트 선언

>>> a = list()

또는

>>> a = [ ]

 

- append()를 통해 요소 추가 가능

>>> a = [1,2,3]

>>> a.append(4)

>>> a

[1,2,3,4]

 

- insert() 함수를 사용하면 특정 위치의 인덱스를 지정해 요소 추가 가능함

>>> a.insert(3,5)   # 3번째 인덱스에 5를 삽입한다. (단, 인덱스는 0부터 시작)

>>> a

[1,2,3,5,4]

 

- 리스트에서 값을 꺼내올 때 

>>> a[3]

5

>>> a[1:3]

[2, 3]

 

- IndexError 발생 시 예외 처리 방법

try:

  print(a[9])

except IndexError:

   print('존재하지 않는 인덱스')

 

- 요소 삭제

>>> del a[1]   # 인덱스1에 있는 값 삭제

>>> a.remove(3)  # 3인 값에 해당하는 요소 삭제

>>> a.pop(3)  # 인덱스3에 해당하는 값을 리턴하고 삭제 진행

 

 

 

딕셔너리

인덱스를 숫자로만 지정할 수 있는 리스트와 달리, 딕셔너리는 문자를 포함해 다양한 타입을 키로 사용할 수 있음.

특히 파이썬의 딕셔너리는 해시할 수만 있다면 숫자뿐만 아니라, 문자, 집합까지 불변 객체를 모두 키로 사용할 수 있음.

 

<딕셔너리의 주요 연산 시간 복잡도>

위처럼 딕셔너리는 대부분의 연산이 O(1)에 처리 가능한 매우 우수한 자료형임. 

 

+추가 모듈

파이썬 3.6이하에서

항상 입력 순서가 유지되는 collections.OrderDict( )

조회 시 항상 디폴트 값을 생성해 키 오류를 방지하는 collections.defaultdict( )

요소의 값을 키로 하고 개수를 값 형태로 만들어 카운팅하는 collections.Counter( )

등등

 

<딕서너리 활용 방법>

- 딕셔너리 선언

>>> a = dict( )

>>> a = { }

>>> a = { 'key1' : 'value1', 'key2' : 'value2' }

 

- 딕셔너리의 키와 값 꺼내오기

>>> for k, v in a.items( ):

             print(k,v)

 

- 삭제하기

>>> del a[ 'key1']

 

 

<딕셔너리 모듈>

defaultdict, Counter, OrderedDict에 대해 살펴보자

 

① defaultdict 객체

: 존재하지 않는 키를 조회할 경우, 에러 메시지를 출력하는 대신 디폴트 값을 기준으로 해당 키에 대한 딕셔너리 아이템을 생성해줌

>>> a = collections.defaultdict(int)

>>> a [ 'A' ] = 5

>>> a [ 'B' ] = 4

이 딕셔너리에는 이렇게 2개의 아이템이 존재함

>>> a [ 'C' ] += 1

>>>a

defaultdict( <class 'int'>, { 'A' : 5, 'B' : 4, 'C' : 1})

C는 존재하지 않는 키지만, defaultdict 객체는 에러 없이 바로 +1 연산이 간으하고 이 경우 디폴트인 0을 기준으로 자동으로 생성한 후 여기에 1을 더해 최종적으로 1이 만들어짐, 

 

② Counter 객체

Counter 객체는 아이템에 대한 개수를 계산해 딕셔너리로 리턴함

>>> 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})

즉 Counter 객체는 이처럼 키에는 아이템의 값이, 값에는 해당 아이템의 개수가 들어간 딕셔너리 생성함, 

Counter 객체에서 가장 빈도 수가 높은 요소 추출은 most_common()을 사용함

>>> b.most_common(2)

[(5, 3), (6,2)]

 

③ OrderedDict 객체

대부분의 언어에서 해시 테이블을 이용한 자료형은 입력 순서가 유지되지 않지만, OrderedDict는 입력 그대로 순서가 유지됨.

>>> collections.OrderedDict( { 'banana': 3, 'apple':4, 'pear':1, 'orange':2})

OrderedDict([('banana', 3), ('apple', 4), ('pear', 1), ('orange', 2)])

그러나 파이썬 3.7부터 딕셔너리는 내부적으로 인덱스를 이용하여 입력 순서가 유지되도록 개선됨.

 

 

 

출처: 파이썬 알고리즘 인터뷰 

'Coding Test' 카테고리의 다른 글

04. 빅오, 자료형  (0) 2022.06.14