📌리스트

순서대로 저장되며 변경 가능한 목록. 내부적으로는 동적 배열로 구현되어있다

동적배역이란..?

크기를 지정하지 않는 배열로, 할당된 공간이 다 채워지면 크기가 동적으로 증가하는 배열을 말한다

파이썬의 리스트는 매우 다양한 기능을 제공해서 스택을 사용할지, 큐를 사용할지 고민할 필요가 없다. ⇒ 스택과 큐의 기능을 모두 제공한다.

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

연산 시간복잡도 설명
len(a) O(1) 전체 요소의 개수 return
a[i] O(1) 인덱스 i의 요소를 가져옴
a[i:j] O(k) i-j까지의 슬라이스 길이만큼 k개의 요소를 가져온다.
elem in a O(n) elem의 요소가 a에 존재하는지 확인한다. 처음부터 순차 탐색하므로 n만큼의 시간 소요
a.count(elem) O(n) elem 요소의 개수 리턴
a.index(elem) O(n) elem 요소의 index 리턴
a.append(elem) O(1) 리스트 마지막에 elem요소를 추가
a.pop() O(1) 리스트 마지막 요소를 추출한다. 스택의 연산
a.pop(0) O(n) 리스트의 첫번째 요소 추출. 큐의 연산. 이 경우는 전체 복사가 필요하므로 시간복잡도가 **O(n)**이다. 따라서 큐의 연산을 주로 사용한다면 리스트보다는 O(1)이 가능한 deque(데크)를 권장
del a[i] O(n) i에 따라 다름. 최악의 경우가 O(n)이다.
a.sort() O( n log n ) 정렬. 팀소트(Timsort)를 사용하며, 최선의 경우 O(n)가능
min(a), max(a) O(n) 최솟값/최댓값을 계산하기 위해서는 전체를 선형 탐색해야 한다.
a.reverse() O(n) 뒤집는다. 리스트는 순서가 유지되므로 뒤집게 되면 입력 순서는 반대로 된다.
#리스트 선언

a = list()

a = []

#insert

a = [1,2,3,4]
a.insert(3,5)

>>[1,2,3,5,4]

#append

a.append('안녕')
>>[1,2,3,5,4,'안녕']

위의 예시에서 알 수 있듯이

insert()를 통해 특정 위치의 인덱스를 지정해 요소를 추가 가능

파이썬의 리스트는 동적 배열에 다양한 자료형 가능