배열이란?
- 같은 타입의 값을 한꺼번에 여러개 저장할 수 있는 공간
- <인덱스, 원소> 쌍의 집합, 인덱스를 주면 해당하는 값이 대응되는 구조
- 동일한 이름을 사용하며 인덱스로 항목에 접근
- 배열이 아니라면 반복문 사용이 불가능
- 항목 접근의 시간복잡도는 항상 O(1)
- 배열의 인덱스는 0부터 시작하며 메모리의 연속된 위치에 저장
- 파이썬에서 배열 원소의 자료형은 어떤 것이라도 상관없으며 배열에는 서로 다른 자료형을 같이 저장할 수 있음
- 배열 원소 자체를 배열에 저장할 수 있으며 파이썬에서는 배열을 리스트와 튜플로 구현
리스트의 기초
- 리스트는 원소를 변경할 수 있는 mutable list형 객체(리스트, 딕셔너리, 집합)
- 연산자 [ ] 안에 원소를 쉼표(,)로 구분하여 표기하여 생성
- 문자열이나 튜플 등 다양한 자료형 객체를 원소로 하는 자료형을 리스트로 형변환 가능
- range()와 list()를 조합하여 사용해 특정 범위의 정수로 구성된 리스트 사용
- 각 자료는 반드시 순서 or 위치를 갖는다
- 순서를 가진 항목들의 모임
- insert(삽입위치, 삽입값), pop ()함수를 사용하여 삽입하거나 추출
- append(값)와 remove(값)을 사용하여 원소를 삽입,삭제
- random.randint(최소,최대) : 정수형 랜덤 수를 범위에 맞게 생성
튜플의 기초
- 튜플은 원소에 순서를 매겨 결합한 것으로 원소를 변경할 수 없는 immutable 자료형(수,문자열,튜플)
- 튜플은 리스트와 다르게 결합 연산자()를 생략할 수 있다.
- 원소가 1개인 경우 반드시 원소 뒤에 쉼표(,)를 입력해야 한다. 입력하지 않으면 단순변수로 인식
- 각 자료는 반드시 순서 or 위치를 갖는다
- tuple(다른 자료형)을 하게 되면 다른 자료형을 튜플로 변환이 가능
- 리스트와 마찬가지로 range()함수를 사용하여 특정 범위의 값을 원소로 갖는 튜플 생성 가능
- 좌변에 여러 개의 변수를 놓고 우변에는 리스트나 튜플을 놓으면 우변의 원소를 좌변의 변수에 한 번에 대입 가능 = 언팩
인덱스, 슬라이싱로 원소에 접근하기
- 인덱스로 접근할 경우 변수[인덱스 위치], 슬라이싱으로 접근한다면 변수[시작:미만:간격]을 사용
- 인덱스나 슬라이싱을 이용해서 값을 교체하거나 누적변수로 값을 교체할 때 값 자체를 변경된 것이 아닌 다른 정수형 객체를 참조하도록 업데이트가 된 것이다.
- len() 함수로 배열의 원소 수 구함
- min(), max() 함수로 배열의 최솟값과 최댓값 구함(리스트는 길이, 정수는 크기, 문자열은 알파벳 순서)
- 비교 연산자로 배열의 대소 또는 등가 관계 판단(맨 앞 원소부터 차례대로 비교)
- 리스트만 reverse(), sort()로 역정렬, 정렬이 가능(x.reverse()은 자기 자신을 y = list(reversed(x))은 x의 원소들을 reverse() 함수가 반환하는 이터러블 객체를 list() 함수에 넘기고 새로운 리스트를 생성을 의미, sorted(x))
- 리스트나 튜플을 2개 선언하여 서로 대입해도 원소 자체는 복사되지 않으며 참조하는 것임
배열을 사용하는 기본 알고리즘
- 배열 원소의 최댓값 구하는 함수
- from typing import Any, Sequence문법은 Any는 제약이 없는 임의의 자료형을 의미하며 Sequence는 시퀀스형을 의미하는데 시퀀스형에는 리스트, 바이트 배열, 문자열, 튜플, 바이트열형이 있다. 이를 사용한 이유는 함수에서 def max_of(a : Sequence) -> Any 건네받은 매개변수 a의 자료형은 시퀀스형중 하나이며 반환하는 것은 임의의 자료형인 Any라는 것을 의미하기 위함이다.
- 함수 안에서 배열 a의 원소값을 변경하지 않으며 호출하는 쪽이 넘겨주는 실제 인수의 자료형은 시퀀스 자료형이라면 무엇이든 상관없으며 최댓값의 원소가 int형이면 int형 값을 반환하며 float형이라면 float형 값을 반환한다.
- if __name__ == '__main__'의 의미는 스크립트 프로그램(모듈(.py))이 직접 실행될 때 __name__ == '__main__'이 참이르모 if문 안에 문장들이 수행되지만 다른 파일로부터import되어 사용될 때는 변수 __name__ != '__main__' 이기때문에 if문 안에 문장들이 수행되지 않음.
- 파이썬에서 인수 전달은 실제 인수인 객체에 대한 참조를 값으로 전달하여 매개변수에 대입되는 방식으로 객체 참조에 의한 전달 call by object reference 용어를 사용.
- 인수가 immutable이라면 함수 안에서 매개변수의 값을 변경하면 다른 객체를 생성하고 그 객체에 대한 참조로 업데이트가 된다. 따라서 매개변수의 값을 변경해도 호출하는 쪽의 실제 인수에는 영향을 주지 않는다.
- 인수가 mutable이라면 함수 안에서 매개변수의 값을 변경하면 객체 자체를 업데이트해 호출하는 쪽의 실제 인수는 값이 변경 된다.
'자료구조' 카테고리의 다른 글
트리 (0) | 2024.07.26 |
---|---|
자료구조 - 연결리스트 (0) | 2024.07.19 |
자료구조 - 스택, 큐, 덱 (0) | 2024.07.09 |
알고리즘 기초 (0) | 2024.07.02 |
자료구조와 알고리즘 (2) | 2024.06.26 |