배열

Python SELF KO
레벨 51 , 레슨 3
사용 가능

4.1 배열의 정의와 속성

배열은 동일한 타입의 요소로 구성된 정렬된 집합의 데이터 구조로, 인접한 메모리 셀에 저장됩니다. 각 배열 요소는 고유한 인덱스를 가지며, 이는 요소에 접근하는 데 사용됩니다.

여기 4개의 요소를 포함하는 간단한 배열 (1, 2, 3, 4) 가 나와 있습니다.

배열의 정의와 속성

배열의 속성:

  • 고정된 크기: 배열의 크기는 생성 시 설정되며 프로그램 실행 중에는 변경할 수 없습니다.
  • 요소의 균일성: 배열의 모든 요소는 동일한 타입이어야 합니다 (예: 정수, 문자열).
  • 메모리의 연속적 저장: 배열 요소는 인접한 메모리 셀에 저장되어 인덱스를 통해 빠르게 접근할 수 있습니다.
  • 인덱스를 통한 빠른 접근: 배열의 어떤 요소에든 O(1) 시간 복잡도로 접근할 수 있습니다.

4.2 배열의 사용 예

이미 알고 있을 수도 있는 배열 사용 예를 보자:

고정 길이의 데이터 저장

요일, 연도의 월:


# 요일 배열 생성
days_of_week = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
print(days_of_week[2])  # 출력: Wednesday

행렬 및 다차원 배열

3x3 행렬:


# 3x3 행렬 생성
matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
print(matrix[1][1])  # 출력: 5

정렬 알고리즘에서의 사용

숫자 배열 정렬:


# 숫자 배열 정렬
numbers = [5, 2, 9, 1, 5, 6]
numbers.sort()  # 배열 정렬
print(numbers)  # 출력: [1, 2, 5, 5, 6, 9]

임시 데이터 저장을 위한 버퍼

파일에서 데이터를 읽기 위한 버퍼:


# 1024 바이트 버퍼 생성
buffer = [0] * 1024
print(len(buffer))  # 출력: 1024

4.3 배열의 주요 연산

중요! Python의 list 클래스는 동적 배열로, 작업 중 크기를 변경할 수 있습니다. 동적 배열에 대한 자세한 내용은 몇 강의 후에 배울 것입니다.

주요 연산: 인덱스를 통한 접근, 삽입, 삭제

인덱스를 통한 접근

배열 요소에 접근하기 위해 인덱스를 사용합니다. 이 인덱스는 요소의 위치를 가리킵니다.


# 인덱스를 통한 배열 요소 접근
arr = [10, 20, 30, 40, 50]
print(arr[2])  # 출력: 30
print(arr[-1])  # 출력: 50 (마지막 요소)

삽입

배열에 요소를 삽입할 때는 새 요소를 위한 공간을 확보하기 위해 모든 후속 요소를 이동시켜야 할 수도 있습니다.

예시 (배열 중간에 요소 삽입):


# 배열에 요소 삽입
arr = [10, 20, 30, 40, 50]
arr.insert(2, 25)  # 2번째 위치에 25 삽입
print(arr)  # 출력: [10, 20, 25, 30, 40, 50]

삭제

배열에서 요소를 삭제할 때는 비어진 공간을 채우기 위해 모든 후속 요소를 이동시켜야 할 수도 있습니다.

예시 (요소 삭제):


# 배열에서 요소 삭제
arr = [10, 20, 30, 40, 50]
arr.pop(2)  # 2번째 위치의 요소 삭제
print(arr)  # 출력: [10, 20, 40, 50]

4.4 배열 사용의 장단점

배열 사용의 장단점을 살펴보자:

장점:

  • 인덱스를 통한 빠른 접근: 배열의 어떤 요소에든 O(1) 시간 복잡도로 접근할 수 있으며, 이는 데이터를 읽는 데 매우 효율적입니다.
  • 간단한 구현: 배열은 이해하기 쉽고 사용하기 쉬우며, 다양한 작업에 쉽게 구현하고 적용할 수 있습니다.
  • 적은 오버헤드: 배열은 연결 리스트와 같은 더 복잡한 데이터 구조에 비해 적은 메모리를 사용합니다.

단점:

  • 고정된 크기: 배열의 크기는 생성 시 설정되며 변경할 수 없습니다. 이는 필요한 배열 크기를 미리 알아야 함을 의미합니다. 필요에 따라 크기를 늘릴 수 있는 동적 배열을 사용해야 할 수도 있습니다.
  • 삽입 및 삭제 비용: 요소를 삽입하거나 삭제할 때는 시간이 많이 소요될 수 있습니다. 특히 배열 중간에 삽입하거나 삭제할 때는 O(n) 시간이 소요됩니다.
  • 비효율적인 메모리 사용: 배열이 완전히 사용되지 않으면 남은 메모리 셀이 비어 있어 메모리 사용이 비효율적일 수 있습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION