데이터를 나열하고, 각 데이터를 인덱스에 대응하도록 구성한 데이터 구조
파이썬에서는 리스트 타입이 배열 기능을 제공하고있음
1. 배열이 왜 필요할까?
- 같은 종류의 데이터를 효율적으로 관리하기 위해 사용한다.
- 같은 종류의 데이터를 순차적으로 저장한다.
'배열(array)'은 자료구조의 기본 형태 중 하나로, 동일한 데이터 유형의 요소들이 연속적인 메모리 공간에 저장되는 구조를 가지고 있다.
배열의 핵심 특징은 다음과 같다
- 고정된 크기: 배열은 선언 시점에 고정된 크기를 가진다. 즉, 일단 배열이 생성되면 그 크기를 변경할 수 없다. 이것은 배열이 메모리에서 연속적인 공간을 차지하기 때문이다.
- 인덱스 접근: 배열의 각 요소는 고유한 인덱스로 접근할 수 있다. 일반적으로 이 인덱스는 0부터 시작하며, 이를 통해 O(1) 시간 복잡도로 각 요소에 빠르게 접근할 수 있다.
- 동일한 데이터 타입: 배열의 모든 요소는 동일한 데이터 유형을 가져야 한다. 예를 들어, 정수 배열에는 정수만 포함되며, 문자열 배열에는 문자열만 포함된다.
배열은 빠른 접근 시간 때문에 데이터 처리와 관련된 많은 문제에서 사용된다. 그러나 배열의 크기가 고정되어 있어서, 배열의 크기를 늘리거나 줄이려면 새로운 배열을 만들어야 하며, 이는 시간과 메모리를 추가로 소비하는 작업이다. 따라서 데이터의 크기가 동적으로 변경되는 경우에는 연결 리스트, 동적 배열 등 다른 자료구조를 고려할 수 있다.
배열의 장점
배열(Array)이 가지는 주요 장점들은 다음과 같다.
- 빠른 접근: 배열은 인덱스를 통해 요소에 직접 접근할 수 있다. 따라서 특정 위치의 데이터를 읽거나 수정하는 것이 매우 빠르다. 이런 특성을 통해 상수 시간, 즉 O(1)의 시간 복잡도로 데이터에 접근할 수 있다.
- 데이터의 순서 유지: 배열은 데이터의 순서를 유지한다. 데이터가 배열에 추가된 순서대로 저장되며, 이 순서는 변경되지 않습니다. 따라서 순서가 중요한 경우에 유용하다.
- 간결한 코드: 배열을 사용하면 간결하고 이해하기 쉬운 코드를 작성할 수 있다. 예를 들어, 반복문을 사용하여 배열의 모든 요소를 쉽게 순회할 수 있다.
- 메모리 효율성: 배열은 요소들을 연속적인 메모리 위치에 저장한다. 이러한 연속성은 메모리를 효율적으로 사용할 수 있게 해준다.
- 다차원 배열 사용 가능: 2차원, 3차원 등의 다차원 배열을 사용하여 복잡한 데이터 구조를 표현할 수 있다. 이는 행렬 연산, 이미지 처리 등에 유용하다.
그러나, 배열의 크기는 생성 시에 정해지며 이후에 변경할 수 없다는 제한성이 있다. 따라서, 데이터의 크기가 런타임에 결정되는 경우나 자주 변경되는 경우에는 다른 자료구조가 더 적합할 수 있다.
파이썬과 C언어 배열 예제
#include <stdio.h>
int main(int argc, char*argv[])
{
char country[3] = "US"
printf("%c%c\n", country[0], country[1]);
printf("%s\n", country);
return 0;
}
contry = "US"
print(country)
country = country+'A'
print(country)
각 프로그래밍 언어는 배열 또는 유사한 자료구조를 처리하는 방식이 조금씩 다르다. 이에 대한 몇 가지 특징을 살펴보자.
- C 언어의 배열:
C 언어에서 배열은 정적으로 할당되며, 크기가 고정되어 있다. 따라서 한 번 선언된 배열의 크기를 변경할 수 없다. char country[3] = "US";에서 배열 country는 char 타입의 요소 3개를 저장할 수 있는 공간을 할당받는다. 이 공간에 "US"라는 문자열을 저장하며, 세 번째 위치에는 null 문자('\0')가 자동으로 들어가게 됩니다. 이 null 문자는 문자열의 끝을 표시하는 역할을 한다.
- 파이썬의 리스트:
파이썬에서는 C의 배열과 유사한 역할을 하는 리스트가 있다. 하지만 파이썬의 리스트는 동적으로 크기가 조절되는 등 C의 배열보다 훨씬 유연하다. 또한, 파이썬에서는 문자열을 변경 불가능한(immutable) 자료형으로 취급하여, 문자열에 직접적인 변경을 허용하지 않는다. 따라서, country = country+'A'는 원래의 문자열 country에 'A'를 추가한 새로운 문자열을 생성하고, 이를 다시 country에 할당하는 작업을 수행한다.
따라서 위의 예제에서, C 언어는 선언 시에 정의된 배열의 크기를 변경할 수 없는 반면, 파이썬은 문자열에 새로운 문자를 추가하는 등 동적으로 데이터를 조작할 수 있다는 차이점을 볼 수 있다.
파이썬과 배열
파이썬 리스트 활용
1차원 배열: 리스트로 구현시
data = [1,2,3,4,5]
print(data) //[1,2,3,4,5]
2차원 배열: 리스트로 구현시
data = [[1,2,3],[4,5,6],[7,8,9]]
print(data[0]) //[1,2,3]
print(data[0][0]) //[1]