[패스트캠퍼스 환급챌린지]딥러닝/Chapter 2. 자료구조

[패스트캠퍼스][환급 챌린지]Chapter 2. 딥러닝을 위한 자료 구조 02-04 파이썬에서의 리스트

포리셔 2023. 3. 12. 23:42

02-04 파이썬에서의 리스트

저번 포스트까지 배열과 연결 리스트에 대해 설명하는 것과 동시에 파이썬의 리스트 자료형과 비교해보았습니다. 아무래도 ML과 딥러닝 분야에서 파이썬이 주력 툴로 사용되기 때문에 그런 것이겠죠. 이번 포스트에서는 이전 시간까지의 내용에 연계하여 파이썬의 리스트 자료형을 알아보겠습니다.

파이썬의 리스트 자료형 함수 이해하기

저번 포스트에서 파이썬의 리스트(list)는 배열과 연결 리스트의 두 자료형 모두의 특성을 가지고 있다는 것을 알아봤습니다. 이를 위해 두 개의 파이썬 클래스를 정의해 연결 리스트에 대한 함수를 사용해봤는데요. 아래 표를 보시면 실제 파이썬에 구현되어 있는 리스트 관련 함수들을 알아볼 수 있습니다.

  연산 시간 복잡도 사용 예제 설명
1 Indexing $O\left(1\right)$ arr[i] 리스트의 특정 인덱스의 값 얻기
2 Storing $O\left(1\right)$ arr[i] = x 리스트의 특정 인덱스에 값 저장하기
3 Append $O\left(1\right)$ arr.append(x) 리스트의 가장 뒤에 데이터 넣기, 스택(stack) 자료구조와 연관됨
4 Pop $O\left(1\right)$ arr.pop() 리스트의 가장 뒤에서 원소 꺼내기
5 Length $O\left(1\right)$ len(arr) 리스트의 길이 얻기
6 Clear $O\left(1\right)$ arr.clear() 리스트 내 모든 원소 제거
7 Slicing $O\left(b-a\right)$ arr[a:b] 리스트에서 인덱스 a부터 b-1까지의 원소만 꺼내 새 리스트 만들기
8 Extend $O\left(len\left(other\right)\right)$ arr.extend(other) 기존 리스트에 다른 리스트를 이어 붙이기
9 Insertion $O\left(N\right)$ arr.insert(index, x) 특정 인덱스에 데이터 x를 삽입
10 Delete $O\left(N\right)$ del arr[index] 특정 인덱스의 데이터 삭제
11 Construction $O\left(len\left(other\right)\right)$ arr=list(other) 다른 자료구조의 원소들을 리스트로 변환
12 In $O\left(N\right)$ x in arr 데이터 x가 리스트에 존재하는지 확인
13 Not in $O\left(N\right)$ x not in arr 데이터 x가 리스트에 존재하지 않는지 확인
14 Pop $O\left(N\right)$ (가장 뒤에 있는 원소 추출 시 한정 $O\left(1\right)$) arr.pop(index) 특정 인덱스의 데이터 추출
15 Remove $O\left(N\right)$ arr.remove(x) 리스트 내에 존재하는 데이터 삭제
16 Copy $O\left(N\right)$ arr.copy() 리스트 복제
17 Min $O\left(N\right)$ min(arr) 리스트 원소 중 최소값
18 Max $O\left(N\right)$ max(arr) 리스트 원소 중 최대값
19 Iteration $O\left(N\right)$ for x in arr: 리스트의 모든 원소 순회
20 Multiply $O\left(k*N\right)$ arr * k 리스트를 k번 반복하여 길게 연장시키기
21 Sort $O\left(N\right)$ arr.sort() 리스트 원소 정렬

위 표에 나온 함수들은 리스트뿐만 아니라 튜플 등의 다른 자료구조에서도 자주 사용되는 함수들이니 필요할 때마다 쓸 수 있게 손에 익혀두는 것이 좋습니다. 볼드체로 표시한 함수들은 개인적으로 사용 빈도가 가장 높았던 것들을 추려본 것입니다. 사용자 성향에 따라 자주 쓰는 함수는 다를 수 있으니 참고해주세요!

예제로 넘어가기 전에 제가 ML 프로젝트를 하면서 느꼈던 몇 가지 팁을 공유해보고자 합니다.

  1. 1번 인덱싱은 타 언어와 달리 0번부터 인덱스를 시작하는 파이썬의 특성을 잘 고려해주셔야 합니다.
  2. 어떤 함수들은 리스트 이름 뒤에 .을 붙이고 함수 이름을 쓰고, 또 어떤 함수들은 함수 이름을 먼저 쓰고 괄호 안에 리스트 이름을 넣기도 합니다. 처음 사용할 때 조금 헷갈릴 수 있는 부분이니 계속 찾아보고 사용해보면서 숙달하는 게 좋습니다. 참고로 이에 대한 정확한 이해는 파이썬 함수와 클래스에 대한 이해가 필요한 부분입니다.
  3. 7번 슬라이싱은 다른 프로그래밍 언어를 사용할 때도 거의 필수적으로 쓰이는 테크닉입니다. 개인적으로는 슬라이싱만 빨리 숙달되었으면 좋았겠다는 아쉬움이 있습니다.
  4. 12, 13번의 in과 not in은 조건문과 연관되어 사용됩니다.
  5. 19번 이터레이션은 사실 함수라기보다는 for 반복문 문법과 관련된 내용이니 그쪽을 참고하시는 게 더 좋을 듯 합니다.

예제

볼드체로 표시된 것들만 간단하게 구현해보겠습니다.

함수 1번, 3번

 

함수 5번, 7번, 10번
함수 12번, 13번, 17번, 18번
함수 19번

 

21일차 후기

위에서 적은 팁 중 하나에 언급되어 있다시피, 저는 어떤 함수는 이름이 앞에 오고, 어떤 함수는 뒤에 오는 게 제일 이해가 안 갔습니다. 이것을 이해하려면 파이썬을 조금 더 깊이 파고들 필요가 있었고, 그러다 보니 파이썬 테크닉, 라이브러리, 더 나아가서 컴퓨터 프로그래밍 자체에 대한 본질적인 공부를 하기 시작했죠. 아마 이 바닥에 흥미가 생긴 것도 그 즈음이었던 것 같네요. 

 

http://bit.ly/3Y34pE0

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.