파이썬에 배열(Array)이 없는 이유
파이썬에 배열(Array)이 없는 이유 — #파이썬배열 #파이썬array AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다 파이썬...
#파이썬배열 #파이썬array
AI스쿨 msa기반 java 백엔드 코스 중에 공부한 내용을 작성하였습니다
파이썬에는 배열이 없는 이유
오늘은 파이썬의 클래스를 사용해서 순수 배열의 기능을 구현해보고자 하는데요. 그전에 파이썬에는 이미 배열이 있는게 아닌가 의문이 드시리라 생각이되는데요. 파이썬에서의 리스트를 배열로 생각하실 수 있습니다.
하지만 파이썬의 리스트는 순수 배열의 기능을 가진 배열로 보기에는 어렵습니다. 그렇다고 순수 리스트 라고도 할 수 없어요. 예를들어 순수 리스트는 인덱스가 존재하지 않고, 노드로 구성되어 해당 데이터의 정보와 다음 값의 정보를 가지고 있어야합니다. (이건 차후에 링크드 리스트를 구현하면서 다시 설명할게요!)
그럼 파이썬의 리스트는 뭘까요? 파이썬에서 사용하는 리스트는 순수 배열과, 순수 리스트의 기능의 장점들을 섞어 만든 제 3의 자료구조라고 볼 수 있습니다. 그래서 순수 배열과 리스트를 구현하기 위해서는 따로 만들어 줘야하는데요. 이를 위해서 클래스를 사용하여 만드는 방법을 공유하고자 합니다!
뼈대 제작 - 순수 배열의 기능들
이전글을 통해 자료구조 배열의 기능을 정리했었습니다. 배열의 기능은 선언, 접근, 수정 크게 3가지가 존재합니다. 그이상의 기능을 필요시에 만들어 주시면 됩니다! 배열이라는 클래시의 굵은 뼈대를 만들고 각 기능을 하나씩 구현해볼게요.
| class Array: def get(self, idx): pass def set(self, idx, value): pass def \_\_init\_\_(self, size): pass |
|---|
선언의 경우에 클래스 호출 시 바로 만들어질 수 있도록 구현할 것이고, get함수를 통하여 원하는 인덱스의 데이터를 가져오고, set함수를 통하여 원하는 인덱스와 원하는 데이터를 수정할 수 있도록 구현할 것입니다.
글로만 설명하면 이해가 어려우니 코드를 통해 함께 보시죠!
아 참고로 내려가서 코드를 보기전에 클래스에 대한 이해도가 부족할 경우 이해하기 어려우시니 클래스 정리글을 통해 학습을 권장드립니다.
선언
배열에는 빈 값이 존재하지 않는다.
배열에는 빈값이 없습니다. 값이 없을 때도 0과 같은 무언가로 데이터가 채워져 있어야 합니다. 이를 위해서 다음과 같은 코드 작성을 고려해 볼 수 있습니다.
| class Array: def get(self, idx): pass def set(self, idx, value): pass def \_\_init\_\_(self, size): self.data = \[0\] \* size |
|---|
배열의 순기능 선언에는 배열의 데이터의 크기가 처음부터 정해져있습니다. 이를 위해 클래스를 호출할 객체에게 size를 받아 그대로 반영하여 만듭니다. 밑에는 선언 예시입니다.
| array = Array(3)*#** \[0, 0, 0\]* |
|---|
배열의 값을 가져오기
인덱스
배열의 가장 큰 장점은 바로 인덱스입니다. 이 인덱스를 사용하면 데이터가 배열에 몇 번째에 위치해 있든 간에 동일한 시간으로 값을 가져올 수 있습니다. 값을 가져오는 것에 있어서는 최상의 성능을 자랑합니다!
이를 위해선 다음과 같은 코드 작성이 고려될 수 있습니다.
| class Array: def get(self, idx): return self.data\[idx\] def set(self, idx, value): *pass** def \_\_init\_\_(self, size): self.data = \[0\] \ size |
|---|
함수의 값을 반환해야 하기 때문에 return을 사용해주면 됩니다. return에 대해 아직 헷갈리시는 분들은 파이썬 return이 이해가 잘 안될때를 참고해주세요
배열의 값을 수정하기
인덱스를 알아야 한다
배열의 수정 역시 뛰어난 성능을 자랑합니다. 물론 해당 요소의 인덱스 값을 필수로 알아야합니다. 배열의 수정은 해당 인덱스의 데이터만 수정해 주면 되므로 다음과 같은 코드 작성이 가능합니다.
| class Array: def get(self, idx): return self.data\[idx\] def set(self, idx, value): self.data\[idx\] = value def \_\_init\_\_(self, size): self.data = \[0\] \* size |
|---|
수정 후 값을 return할 필요는 없습니다! 배열이 모두 완성되었네요! 이제 응용을 해봅시다.
배열 응용하기
요구하는 배열을 만들어 보기
자 이제 우리는 가장 원초적인 기능을 가진 배열을 완성하였습니다. 상황에 따라 여러가지 기능을 구현할 필요가 있을 수 있습니다. 지금부터는 요구하는 배열을 함께 만들어 봅시다.
- 크기가 10
- \[2, 4, 6, 8, 10, 12, 14, 16, 18, 20\] 배열을 만들라
위에 생성한 클래스와 반복문을 사용하여 바로 구현이 가능합니다!
| class Array: def get(self, idx): return self.data\[idx\] def set(self, idx, value): self.data\[idx\] = value def \_\_init\_\_(self, size): self.data = \[0\] \ size# 크기가10인 배열을 선언array = Array(10)# 반복문으로 한번에 값을 넣기for i in range(len(array.data)): array.set(i, 2 \ (i+1))print(array.data)# 결과\[2, 4, 6, 8, 10, 12, 14, 16, 18, 20\] |
|---|
배열의 크기를 따로 얻어오기
| class Array: def get(self, idx): return self.data\[idx\] def set(self, idx, value): self.data\[idx\] = value# 배열의 크기 가져오는 함수 선언 def len(self): return len(self.data) def \_\_init\_\_(self, size): self.data = \[0\] \ size# 크기가10인 배열을 선언array = Array(10)''' for i in range(len(array.data)): array.set(i, 2 \ (i+1)) '''~~~~# 반복문 수정for i in range(array.len()):array.set(i, 2 \* (i+1))print(array.data)# 결과\[2, 4, 6, 8, 10, 12, 14, 16, 18, 20\] |
|---|
