리스트의 특성(1 /3)
1
2
3
lst
140500114981104
140500114981136
140500114981168
메모리 주소
선언시 “[]”를 사용함
+32
+32
메모리가 연속적으로 잡히므로
임의접근(인덱스 사용이 가능, lst[0], lst[1], lst[2])
9.
리스트의 특성(2 /3)
1
2
3
lst
140500114981104
140500114981136
140500114981168
메모리 주소
+32
+32
+32
4
140500114981200
- 동적배열로 관리되기 때문에 크기 고민 X
- 기존 원소는 다시 생성되지 않고 유지
10.
리스트 생성(3 /3)
1
2
5
3
lst
140500114981104
140500114981136
140500114981168
메모리 주소
+32
+32
- mutable(변경 가능)하므로, 기존 객체 유지
된 상태에서 값이 수정됨
- : 을활용해서 원소 하나가 특정 범위의 원소를 가져올 수 있음
- [A:]의 경우 인덱스 A에 해당되는 원소 부터 의 뒤가 비어있을 경우 맨 끝까지 원소를 가져옴
- [:A]의 경우, 처음부터 인덱스 A-1에 해당되는 원소까지 가져옴
- 음수인 경우에도 동일하게 적용됨, [:]를 활용하면 전체를 나타낼수도 있음
리스트의 슬라이싱
- 리스트의 끝에item을 추가
- 반환값은 없음
- 시간복잡도 O(1)
append(item)
1
2
3
lst
4
5
원소 추가
22.
- 리스트의 맨끝의 item을 삭제
- 반환값은 삭제한 원소
- 시간복잡도 O(1)
pop()
1
2
3
lst
4
맨 뒤의 원소를
삭제 하고 반환
23.
- 리스트의 맨앞의 item을 삭제
- 반환값은 삭제한 원소
- 시간복잡도 O(N), N은 리스트의 길이
pop(0)
1
2
3
lst
맨 앞의 원소 삭제
모든 원소가
이동해야함
24.
- 리스트에서 “맨처음 나오는” item에 해당되는 값을 삭제
- 반환값은 없음
- 시간복잡도 O(N), N은 리스트의 길이
remove(item)
1
3
11
lst
7
11
맨 처음 나오는 item 삭제
맨 처음 값만 삭제 되므로 item과 같은 값이지만 삭제 되지 않음
25.
- 리스트의 뒤에s의 모든 요소를 추가
- 반환값은 없음
- 시간복잡도 O(s), s의 원소 길이
extend(s)
1
2
3
lst
7
8
lst의 뒤에 [7,8] 추가
26.
- 리스트에 item값이 있는지 확인
- item이 있으면 True, 없으면 False
- 시간복잡도 O(N), N은 리스트의 길이
item in 리스트
1
2
3
lst
- 리스트의 맨앞의 원소를 삭제할 경우에는 뒤의 모든 원소가 copy-move 됩니다. O(N)
- 대안 : deque를 사용 O(1)
맨 앞에 원소 삭제(삽입도 마찬가지)
1
2
3
lst
copy move
1
2
3
lst copy-move X
deque의 자세한 내용은 아래 참조
https://github.com/dremdeveloper/codingtest_python/blob/main/Algorithm_with_DataStructure/deque.py
29.
- 매번 원소를탐색할 때 마다 순차 탐색이 진행됩니다. O(N)
- 대안 : set을 사용 합니다. O(1)
빈번 하게 원소를 탐색
1
2
3
lst
한번 찾을때 마다 3회
탐색하고, 이를 99번
반복
297번 연산
set은 해시기반으므로 한번 찾을때 마다 1회 반복합
니다. 99회 연산!! 따라서 시간 복잡도 O(1)
set은 2주차 에서 다루지 않습니다. 아래 참조
https://github.com/dremdeveloper/codingtest_python/blob/main/Algorit
hm_with_DataStructure/set.py
- mutable한 객체를key로 하면 Key error가 발생
mutable(변경가능한 객체)는 key가 될수 없음
Mutable Object Immutable Object
list int,float,bool…
set string
dictionary tuple
딕셔너리의 key가 될 수 없음
51.
- 딕셔너리에서 key에해당되는 값을 변경할 수 있음, 해당 되는 값이 없을 경우 KeyError 발생함!!!
아래와 같이 if,else를 사용하거나 값이 없는 key에 기본값을 주고 싶으면 defaultdict이 대안
- 시간 복잡도 O(1)
[]을 사용할 경우 key가 없으면 KeyError가 발생
dic
“a”
“b”
1
2
“c”
3
5
52.
- 딕셔너리를 사용하려고할때 중복되는 key가 있는지 검토해야 함.
- 중복 key가 있다면 list,deque 같이 중복여부에 영향을 받지 않는 자료구조를 사용하는게 대안
딕셔너리는 중복 key를 허용하지 않음
dic
“a”
“b”
1
4
2
“c” 5