* 파이썬 초정독 스터디 - 코딩테스트 합격자되기 파이썬 편 도서를 참고하여 작성된 글입니다.
배열과 리스트
- 배열 내 데이터에 한 번에 접근할 수 있으니,
위치를 아는 경우
빠르게 탐색할 수 있음. 이와 같은 방식을임의 접근
이라 하며, O(1) - 배열과 리스트는 정확히는 다르지만 파이썬의 리스트는 타 언어의 배열 기능을 그대로 활용하면서 크기도 가변적이며 여러 함수를 제공하므로 편의성이 좋음
- 배열은 요소가 모두 동일한 타입으로 이루어져 있지만, 파이썬의 리스트는 여러 타입의 요소로 구성되어 유연함/효율성에 차이가 있음.
리스트 컴프리헨션
- 리스트 내부에 코드를 작성하는 방법
- for 문의 반복변수는 for문 앞에 표기하고, 리스트에 최종적으로 들어가는 값의 기준이 됨.
- 나머지 모든 표현은 for문 뒤에 표기
ex)numbers = [] for i in range(1,11): numbers.append(i) #[1,2,3,4,5,6,7,8,9,10]
이 코드는 아래와 같이 리스트 컴프리헨션으로 표현할 수 있음
[x for x in range(1,11)] #[1,2,3,4,5,6,7,8,9,10]
만약 조건식을 추가한다면
[2*x for x in range(1,11)] #[2,4,6,8,10,12,14,16,18,20]
홀수인 x만으로 리스트를 만들도록 조건문을 추가한다면
[x for x in range(1,11) if x%2 == 1 ] # [1,3,5,7,9]
반복 변수가 여러개라면
[(x,y) for x in [1,3] for y in [2,4]] #[(1,2),(1,4),(3,2),(3,4)]
반복 변수가 여러 개이면서 조건식이 필요하다면
[(x,y) for x in [1,3] for y in [2,4] if x<2 if y%2==0] #[(1, 2), (1, 4)]
배열의 시간복잡도
- 임의 접근시 O(1)
- 맨 뒤에 삽입 O(1)
- 맨 뒤의 인덱스는 계산이 필요 없으므로 임의접근과 동일
- 맨 앞에 삽입 O(n)
- 맨 앞에 삽입하는 경우 나머지 인덱스에 1칸씩 뒤로 미루는 연산이 발생하므로 총 n회.
- 중간(임의의 위치)에 삽입 O(n)
배열을 선택할 때 고려할 점
- 정확한 위치를 아는 경우가 아니라면 데이터 추가나 삭제에 드는 비용이 큼. 그만큼 인덱스를 이동시켜야 하기 때문.
- 임의 접근으로 특정 데이터에 자주 접근하는 경우에는 효율적임
- 너무 큰 데이터는 배열에 저장하면 연산 속도도 떨어지고 메모리도 많이 소모하게 됨
- 따라서 배열을 사용하기 전에는 할당할 수 있는 메모리 크기를 확인하고, 임의접근이 아닌 중간위치 삽입/삭제가 빈번한지 확인해야 함
자주 사용되는 리스트 기법
- append(item) : 끝에 데이터 추가
- + [item] : 리스트를 덧붙일 수 있음
- insert(index, item) : 특정 인덱스에 데이터 삽입
- pop(index) : 특정 인덱스 삭제
- remove(item) : 인수로 받은 값이 처음 등장하는 인덱스 삭제
- index(item) : 특정 데이터가 처음 등장하는 인덱스 리턴
- sort(), sorted() : 내림차순 데이터 정렬
- count(item) : 특정 데이터가 포함된 홧수
'Algorithm' 카테고리의 다른 글
재귀(recursive) (3) | 2024.09.15 |
---|---|
스택(stack) (2) | 2024.09.07 |
데이터 타입, 앱실론, 함수, 람다표현식 (0) | 2024.08.24 |
시간 복잡도와 빅오 표기법 (0) | 2024.08.17 |