리스트
<리스트의 주요 연산 시간 복잡도>
<리스트 활용 방법>
- 리스트 선언
>>> 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 |
---|