728x90
반응형
배열
- 여러개의 변수를 담는 공간
- 인덱스(index)가 존재하고, 인덱스는 0부터 시작
- 특정한 인덱스에 직접적으로 접근 가능함
배열의 특징
컴퓨터의 메인 메모리에서 배열의 공간은 연속적으로 할당됨
- 장점: 캐시(cache) 히트 가능성이 높고, 조회가 빠름
- 캐시 = CPU 보다는 느리지만 좀 더 넓은 공간
- 램에 비해 공간은 작지만 속도는 빠름
- 램에 있는 데이터 일부를 캐시메모리에 옮겨서 사용한다는 말임
- 캐시를 사용하면 array는 각각의 데이터가 인접한 공간에 묶여있어 한꺼번에 캐시 메모리로 옮길 수가 있음
- 단점: 배열의 크기를 미리 지정하는 것이 일반적이기 때문에 데이터 추가, 삭제에 한계가 있음
리스트 컴프리헨션(List Comprehension)
- 파이썬에서는 임의의 크기를 가지는 배열을 만들 수 있음
- 일반적으로 리스트 컴프리헨션을 사용
크기가 N인 1차원 어레이 만드는 방법
n = 4
arr = [0] * n
print(arr)
# [0, 0, 0, 0] <- 실행결과
n = 4
arr = [i for i in range(n)]
print(arr)
# [0, 1, 2, 3] <- 실행결과
크기가 N x M 인 2차원 어레이 만드는 방법
n = 3
m = 5
arr = [[0] * m for i in range(n)]
print(arr)
# [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]] <- 실행결과
어레이 초기화시에 알아둘점
- 리스트는 기본적으로 메모리 주소를 반환한다.
- 단순히 [[ 0 ] * m] * n 형태로 어레이 초기화를 하면 안됨
- 이렇게 초기화 할경우 n 개의 [0] *m 리스트는 모두 같은 객체로 인식됨
- 같은 메모리(동일한 리스트)를 가리키는 n 개의 원소를 담는 리스트가됨
n = 3
m = 5
arr1 = [[0] * m] * n
arr2 = [[0] * m for i in range(n)]
arr1[1][2]=1
arr2[1][2]=1
print(arr1)
print(arr2)
# [[0, 0, 1, 0, 0], [0, 0, 1, 0, 0], [0, 0, 1, 0, 0]] <- 실행 결과
# [[0, 0, 0, 0, 0], [0, 0, 1, 0, 0], [0, 0, 0, 0, 0]] <- 실행 결과
# 좀더 보기쉽게 바꾸면 이런모양
[
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 1, 0, 0]
]
[
[0, 0, 0, 0, 0],
[0, 0, 1, 0, 0],
[0, 0, 0, 0, 0]
]
728x90
반응형
'Python' 카테고리의 다른 글
[자료구조] 스택(Stack) (1) | 2024.01.04 |
---|---|
[자료구조] 리스트(List) 초간단 설명 및 예시 (0) | 2024.01.03 |
[자료구조] 연결리스트(Linked List) (2) | 2024.01.02 |