콜렉션
콜렉션의 정의
Section titled “콜렉션의 정의”여러 데이터를 묶어 하나의 구조로 다루기 위해 제공되는 자료 구조의 총칭
- 데이터 저장 방식과 접근 방식에 따라 시퀀스 비시퀀스 매핑으로 구분
- 시퀀스: 리스트(list), 튜플(tuple)
- 비시퀀스: 세트(set)
- 매핑: 딕셔너리(dictionary)
다수의 데이터를 효율적으로 저장 관리하고 알고리즘을 통해 신속한 프로그램 구현 가능
- 데이터 분석, 네트워크 통신, 파일 처리 등 다양한 분야 및 프로그래밍 영역의 기본 도구로 활용
데이터를 순서있게 저장하는 가면(mutable) 시퀀스
- 서로 다른 데이터 타입을 저장할 수 있는 유연한 구조
- 원소를 추가 삭제 수정할 수 있는 구조로 설계
튜플(tuple)
Section titled “튜플(tuple)”데이터를 순서있게 저장하는 불면(immutable)시퀀스
- 생성 후 원소가 바뀌지 않도록 설계된 안정적 저장 구조
- 불변성으로 의도치 않은 데이터 변경을 방지
- 리스트보다 메모리 효율과 접슨 속도에서 유리
세트(set)
Section titled “세트(set)”중복을 허용하지 않으며 순서를 유지하지 않는 컬렉션
- 수학적 집합 개념을 구현한 데이터 구조
- 원소 간의 고유성을 보장
- 중복된 값을 자동으로 제거하여 데이터 정제에 유용
딕셔너리(dictionary)
Section titled “딕셔너리(dictionary)”key-value의 쌍으로 데이터를 저장하는 매핑 자료형
- 키에 대응되는 값을 빠르게 검색할 수 있도록 설계된 구조
- 키는 불변 객체만 허용되며, 값은 어떤 타입이든 저장.
리스트의 활용
Section titled “리스트의 활용”접은 연산자([,])와 인덱스 번호 사용
- 양수는 왼쪽부터, 음수는 오른쪽부터 순차 접근
리스트 관련 연산자
Section titled “리스트 관련 연산자”| 연산자 | 사용 예 | 의미 |
|---|---|---|
| in | x in s | 원소 x가 순서 s에 포함 여부 |
| not in | x not in s | 원소 x가 순서 s에 불포함 여부 |
| + | s1 + s2 | 2개 순서 s1과 s2를 연결 |
| * | s * n | 순서 s를 n번 복사하여 연결 |
| <, >, =, <=, >=, != | s 연산자 t | s와 t의 사전식 비교 |
리스트 관련 내장 함수
Section titled “리스트 관련 내장 함수”| 연산자 | 사용 예 | 의미 |
|---|---|---|
| len(s) | len(s) | s의 길이, 즉 s의 원소 개수 |
| min(s) | min(s) | s에서 가장 작은 원소 |
| max(s) | max(s) | s에서 가장 큰 원소 |
| sum(s) | sum(s) | s의 모든 원소의 합 |
리스트 메소드의 사용
Section titled “리스트 메소드의 사용”- 객체지향 프로그래밍 패터다임 기능
- 메소드는 클래스 내부에 정의된 함수
- 해당 객체의 데이터에 접근하여 특정 작업을 수행하는 명령문의 집합
리스트 주요 메소드
Section titled “리스트 주요 메소드”| 메소드 | 의미 |
|---|---|
| append(x: object): None | 원소 x를 리스트의 끝에 추가 |
| count(x: object): int | 리스트 내, 원소 x의 출현 횟수를 반환 |
| index(x: object): int | 리스트에서 원소 x가 첫번째로 나온 위치의 인덱스를 반환 |
| pop(i): object | 주어진 위치의 인덱스의 원소를 반환하고 제거 |
| insert(index: int, x: object): None | 원소 x를 주어진 인덱스(위치)에 삽입 |
| remove(x: object): None | 리스트에서 원소 x를 제거 |
| reverse(): None | 리스트 내의 원소들을 역순으로 생성 |
| sort(): None | 리스트 내의 원소들을 오름차순으로 정렬 |
리스트의 조작
Section titled “리스트의 조작”- 리스트 슬라이싱의 개념
대상 리스트의 부분 리스트를 생성
리스트[시작인덱스:끝인덱스:간격] - 리스트 컴프리헨션의 개념
리스트를 간결하게 생성, 조작
[표현식 for 변수 in 리스트]
[표현식 for 변수 in 리스트 if 조건 ]- 코드가 짧아지고 가독성 향상, 내부 최적화 일반 for문보다 빠른 속도, 필터링으로 필요 데이터만 추출
튜플(tuple)과 문자열
Section titled “튜플(tuple)과 문자열”데이터를 순서있게 저장하는 불변(immutable) 시퀀스
- 리스트와 기능적으로 동일
- 생성 후 원소가 바뀌지 않도록 설계된 안정적 저장 구조
- 원소의 순서 또한 고정
- 불변성으로 의도치 않은 데이터 변경을 방지
- 리스트보다 메모리 효율과 접근 속도에서 유리
튜플의 역할
Section titled “튜플의 역할”- 튜플의 ()은 생략 가능 : 콤마(,) 로 불리된 모든 값들이 튜플
- 함수는 원칙적으로 단 하나의 값만 반환 두 값을 ()로 묶어 한 개의 튜플로 객체화해서 전달
- 튜플의 생성은 괄호()가 아닌 콤마(,)
튜플 관련 연산자, 내장함수와 메소드
Section titled “튜플 관련 연산자, 내장함수와 메소드”- 할당 연산자(=) 이외의 연산자는 리스트와 동일
- 내장 함수 len, min, max, sum은 리스트와 동일
- 주요 메소드 불변성에 따라 원소가 수정되는 메소드는 미정의
| 메소드 | 의미 |
|---|---|
| index(x: obj): obj | 원소 x의 인덱스를 반환 |
| count(x: obj): int | 튜플 내, 원소 x의 출현 횟수를 반환 |
튜플의 정렬 연산
Section titled “튜플의 정렬 연산”- 리스트는 sort() 메소드를 통해 스스로 정렬
- 튜플은 불변으로 sort() 메소드 미정의
- 내장함수 sorted() 사용
튜플의 원소 추가
Section titled “튜플의 원소 추가”rad_list = tuple([7, 22, 4, 22, 47])rad_list = rad_list + (30, )- 리스트는 append() 메소드를 통해 원소 추가
- 튜플은 불변으로 append() 메소드 미3정의
- +연산자로 연결
(30) < 이건 그냥 하나의 정수 (30, ) 이렇게 써야 원소가 하나인 튜플
튜플 슬라이싱과 컴프리헨션
Section titled “튜플 슬라이싱과 컴프리헨션”[start : end : step] 구문형식을 동일하게 사용
- 잘라낸 결과는 새로운 튜플로 생성
- 슬라이싱을 이용한 부분 수정 불가
hei_list = [1, 5, 14, 26, 31]hei_list[1:3] = [32, 19]rad_list = tuple([7, 22, 4, 15, 47])rad_list[1:3] = [32, 19] # 오류 발생튜플은 컴프리헨션 불가능
- 데이터를 요청할 때마다 하나씩 만드는 제너레이터 표현식으로 변화
문자열의 구성
Section titled “문자열의 구성”원소가 문자로만 고정된 불변 시퀀스
- 시퀀스의 성질을 공유 : 인덱싱, 슬라이싱, 시퀀스 내장함수, 반복 가능
문자열 메소드
Section titled “문자열 메소드”| 메소드 | 의미 |
|---|---|
| split(str): list | 특정 문자를 기준으로 쪼개어 리스트로 변환 |
| join(list): str | 리스트 등의 문자열들을 하나로 합침 |
| find(str): int | 찾는 문자가 없으면 -1을 반환 (에러 X) |
| replace(old: str, new: str): str | 특정 문자를 다른 문자로 바꾼 새 문자열 반환 |
| strip(): str | 양쪽 공백(또는 특정 문자)을 제거 |
| upper(): str | 대문자/소문자로 변환 |
| lower(): str | 대문자/소문자로 변환 |
| isdigit(): bool | 숫자로만 구성되어 있는지 확인 (True/False) |
| isalpha(): bool | 알파벳으로만 구성되어 있는지 확인 |
| isalnum(): bool | 알파벳과 숫자로만 구성되어 있는지 확인 |
세트(set)
Section titled “세트(set)”중복을 허용하지 않으며 순서를 유지하지 않는 변경 가능 컬렉션
- 수학적 집합 개념을 구현한 데이터 구조
- 원소 간의 고유성(uniqueness)을 보장
- 중복된 값을 자동으로 제거하여 데이터 정제에 유용
세트 관련 연산자
Section titled “세트 관련 연산자”- 할당 연산자 =, 멤버십 연산자 in, not in는 의미 동일
- 산술 연산자 +, * 는 사용 불가 중복 불허 및 무순서 특징, + 대신 합집합(|) 사용
- 비교 연산자 <, >, <=, >=는 부분집합 여부로 의미 변경
<, <= 왼쪽이 오른쪽의 부분집합 여부 확인
, >= 왼쪽이 오른쪽의 상위집합 여부 확인
- 동등 연산자 ==, != 는 순서 무시
rad_list = set([7, 22, 4, 22, 47])rad_list2 = set([22, 4, 7, 47])print(rad_list == rad_list2)세트 관련 내장함수
Section titled “세트 관련 내장함수”중복이 허용되지 않음에 따라 다른 콜렉션 객체와 일부 실행 결과가 상이
| 연산자 | 의미 |
|---|---|
| len(s) | 중복이 제거된 후의 개수 |
| min(s) | s에서 가장 작은 원소 |
| max(s) | s에서 가장 큰 원소 |
| sum(s) | 모든 원소의 합(중복은 1회만) |
세트 주요 메서드
Section titled “세트 주요 메서드”| 메소드 | 의미 |
|---|---|
| issuperset(s: set): bool | s가 자신의 상위집합 여부를 검사 |
| issubset(s: set): bool | s가 자신의 부분집합 여부를 검사 |
| add(x: obj): None | 원소 x를 추가 |
| remove(x: obj): None | 원소 x를 제거 |
| intersection(s: set): set | 세트 s와 교집합 결과를 반환 |
| union(s: set): set | 세트 s와 합집합 결과를 반환 |
| difference(s: set): set | 세트 s와 차집합 결과를 반환 |
세트 슬라이싱과 컴프리헨션
Section titled “세트 슬라이싱과 컴프리헨션”- 슬라이싱 불가능 : 세트는 순서 개념이 없는 비순서 컬렉션
- 세트의 컴프리헨션
콜렉션으로 부터 조건필터링, 변환, 중복 제거 가능
구문형식 {표현식 for 변수 in 콜렉션 if 조건식}
key-value의 쌍으로 데이터를 저장하는 매핑(mapping) 자료형
- 키에 대응되는 값을 빠르게 검색할 수 있도록 설계된 구조
- 키는 불변 객체만 허용되며, 값은 어떤 타입이든 저장
구문 형식
{“키1”: “값1”, “키2”: “값2”, …, “키n”: “값n”}
키에서 값을 찾아내는 딕셔너리는 값으로 키를 찾는 일은 불가능하다.
딕셔너리 관련 연산자
Section titled “딕셔너리 관련 연산자”- 멤버십 연산자 in, not in는 키의 존재 여부 확인
- 산술 연산자 +, * 는 사용 불가
- 접근 연산자 [ ]를 통해 값에 접근
pythond1 = {“a”:10, “b”:20, “c”:30, “d”:40}
print(d1[“a”])
- 비교 연산자 <, >, <=, >=는 사용 불가
- 동등 연산자 ==, != 는 키-값 쌍이 같은지 비교 순서는 무관
딕셔너리 관련 내장 함수
Section titled “딕셔너리 관련 내장 함수”| 연산자 | 의미 |
|---|---|
| len(s) | 키-값 쌍의 개수 |
| min(s.values()) | 값 중 가장 작은 값 |
| min(s.keys()) | 키 중 가장 작은 값 |
| max(s.values()) | 값 중 가장 큰 값 |
| max(s.keys()) | 키 중 가장 큰 값 |