본문 바로가기

BE/Python

[Python] 리스트(List) 정리

안녕하세요. 오늘은 파이썬 자료형 중 하나인 리스트 자료형에 대해 정리하겠습니다. 

파이썬의 리스트는 입력 순서가 유지되며, 내부적으로 동적 배열로 구현되어 있어 삽입/삭제가 가능한 자료구조입니다.

list 는 C++의 vector, Java의 ArrayList와 비슷한데요. 연속된 구조로 저장되는 배열, 다양한 타입을 연결하여 배치하는 연결 리스트의 장점을 갖추고 있어 String, Int, Boolean 등 다양한 자료 데이터형을 저장할 수 있습니다. 

 

목차
1. 리스트란? 
2. 리스트의 주요 연산 

 

📌 1. 리스트란?

리스트란, 선형 자료구조로서 입력순서가 유지되며 내부적으로 동적 삽입 삭제가 가능한(push/pop) 자료구조입니다.

Last in Last Out인 스택의 자료구조와 유사하며, 삽입/삭제는 append() / pop() 메서드를 통해 구현할 수 있습니다. 

리스트(List) 사용 시,  마지막 원소 추가/삭제는 O(1) 의 시간복잡도가 소요되는 것에 비해  첫번째 원소를 삽입/삭제하는 경우 O(N) 이 소요되므로 큐의 연산을 사용할 때에는 주의해야 합니다. 또한, O(1),O(N),O(k) 등 복잡도를 가진 여러 연산들을 지원합니다. 

 

파이썬에서 리스트는 대괄호 [ ]를, 튜플은 소괄호 ( )를, 딕셔너리는 중괄호 { }를 사용해서 나타냅니다. 리스트는 자료를 변경할 수 있으며, 인덱스 1,2,3 등으로 순차적 접근이 가능합니다 .

 

📌 2. 리스트의 주요 연산

1. len(a)  

: 전체 요소의 개수를 리턴한다. 

시간 복잡도 : O(1) 

a = [1,2,3] 
print(len(a)) #3

 

2. a[i] 

: 특정 인덱스 i의 요소를 가져온다. 

시간 복잡도 : O(1) 

a = [1,2,3] 
print(a[1]) #2

 

3. a[i:j] 

: 범위 i부터 j까지(i이상 j미만) 슬라이스의 길이만큼 k개의 요소를 가져온다.

시간복잡도 : O(k) 

a = [1,2,3,4,5]
b = a[1:3] #2,3

 

4. elem in a 

: elem 에 a 요소가 있는 지 확인한다. 처음부터 순차 탐색하므로 최악의 경우 O(N), 최선의 경우 O(1) 시간이 소요됩니다. 

시간복잡도 : O(N)

 

5. a.count(elem) 

: elem 의 요소의 개수를 리턴합니다. 

시간복잡도 : O(N) 

a = [1,2,3,4,5,'안녕',True, True]
print(a.count(True)) #2

 

6. a.index(elem) 

: elem 요소의 인덱스를 리턴합니다. 

시간복잡도 : O(N)

 

7. a.append(elem) 

: 리스트에 elem 요소를 추가합니다.

시간복잡도 : O(1) 

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

 

8. a.pop() 

: 리스트의 마지막 요소를 빼냅니다. (스택의 Pop 연산) 

시간복잡도 : O(N)

a = [1,2,3,4,5,'안녕']
a.append('행복')
a.pop() #삽입된 데이터 행복이 제거

 

9. a.pop(0) 

: 리스트의 첫번째 요소를 빼냅니다. (큐의 Pop 연산) 

시간복잡도 : O(1)

a = [1,2,3,4,5,'안녕','행복']
a.pop(0) #처음 데이터인 1이 제거

 

10. del a[i] 

: 리스트의 i번째 요소를 삭제합니다 .

최악의 경우 시간복잡도 O(N), 최선의 경우 시간복잡도 O(1) 

a = [1,2,3,4,5,'안녕','행복']
del(a[5]) #안녕이 제거

 

11. a.sort() 

: Team sort 방법을 사용해 O(NlogN) 만에 리스트를 정렬합니다.

시간 복잡도 : 최선의 경우 O(N) 에 실행됩니다. 

 

12. min(a) / max(a) 

: 최솟값 / 최댓값을 계산하여 리턴합니다. 

시간복잡도 : 전체를 선형 탐색해야 하므로 O(N) 

a = [1,2,7,4,6,3]
print(max(a)) #7
print(min(a)) #1

 

13. a.reverse() 

: 입력순서가 유지된 리스트를 뒤집습니다.

시간복잡도 : O(N)

a = [1,2,7,4,6,3]
a.reverse()