[Python for Data Analysis] 03. 내장 자료구조, 함수, 파일 (1)
- 저자
- 웨스 맥키니
- 출판
- 한빛미디어
- 출판일
- 2023.05.01
이 글은 <파이썬 라이브러리를 활용한 데이터 분석 3판>의 내용을 바탕으로 합니다.
Chapter 3: 내장 자료구조, 함수, 파일의
소단원 §3.1 자료구조와 순차 자료형의 내용을 담고 있습니다.
§3.1 자료구조와 순차 자료형
(3. 1. 1) 튜플
◈ 튜플
- 튜플 (Tuple): 불변한(immutable) 순차 자료형
- 소괄호나 생략, 또는 tuple() 이용하여 튜플 생성
- 인덱싱, 중첩 튜플 가능
- + 연산자: 튜플 이어붙이기 (튜플을 이어붙여 새로운 튜플을 만드는 것)
- * 연산자: 튜플의 반복
◈ 튜플에서 값 분리하기
- 위와 같이 튜플의 값들을 하나씩 분리 가능
- 튜플 내의 리스트 객체도 분리 가능
- 튜플에서 값 처음의 일부만 얻고 싶을 땐 *rest (또는 *_)를 이용
◈ 튜플 메서드
- count(val) : 튜플에서 val의 개수를 반환
(3. 1. 2) 리스트
◈ 리스트
- 리스트 (List) : 크기, 내용 변경 가능한 자료형(mutable)
- 대괄호, list() 로 생성
- 이터레이터/제너레이터의 실제값 담기 위해 사용
◈ 원소 추가하고 삭제하기
*원소 추가
- append( item ) : 리스트의 가장 마지막에 item 추가
- insert( idx, item ) : 리스트의 원하는 자리(idx)에 item 추가
- 일반적으로 성능 insert < append (insert는 자리 마련을 위해 값을 모두 이동시켜야함)
*원소 삭제
- pop( idx ) : 특정 위치(idx) 값 반환하고 삭제
- remove( item ) : 특정 값 삭제, 앞에서부터 삭제
*원소 확인
- in / not in 이용하여 원소 존재하는지 확인 가능
- {element} in {list} 로 사용 => 존재하면 True, 존재하지 않으면 False 리턴
◈ 리스트 이어 붙이기
- + 연산자 : 여러개 리스트 합쳐서 새로운 리스트 생성
- extend( list2 ) : 기존의 리스트에 list2 추가
- 일반적으로 성능은 ( + 연산자 ) < extend
=> +는 리스트 생성 후 값을 복사하는 과정이 필요하므로
◈ 정렬
- sort( reverse = False, key = len ) : 생략시 오름차순 정렬
reverse 옵션 : reverse = False 는 오름차순, reverse = True는 내림차순 정렬
key 옵션 : key = len은 문자열의 길이를 기준으로 정렬
- sorted( list ): list 정렬하여 새로운 리스트 반환, 원본 리스트 변화 x
- sort는 매서드, sorted는 함수!
◈ 슬라이싱
- [start : stop : step] 으로 사용 (end보단 stop으로 이해하자. stop 전까지만 주어짐)
- start 인덱스부터 stop 인덱스 전까지 => stop - start 의 개수만큼 반환
- 음수 인덱스, 스텝으로 지정도 가능
(3. 1. 3) 딕셔너리
◈ 딕셔너리 (Dictionary)
- 키 - 값 쌍으로 이루어짐 => 키를 이용한 검색, 삽입 수정 등이 용이
- { 키 : 값 } 으로 생성 / 키는 불변 자료형만 가능 ex) 리스트 x
- update( { } ) : 기존의 딕셔너리에 새로운 딕셔너리 추가
- pop( key ) : key에 해당하는 value 반환 후 해당 원소 삭제
- del dic[ key ] : key에 해당하는 원소 삭제
- keys() : 딕셔너리의 키들 이터레이터 반환하는 매서드
- values() : 딕셔너리의 값들 이터레이터 반환하는 매서드
- items() : 딕셔너리 (key, value) 튜플쌍 반환하는 매서드
◈ 순차 자료형에서 딕셔너리 생성하기
- dict( 튜플 ) : 튜플 -> 딕셔너리로 생성해주는 함수
[참고]
- zip( list1, list2 ) : list1, list2 원소들 순서대로 튜플쌍 생성하는 함수
◈ 기본값
- dic[ key ] 로 접근하면 딕셔너리에 해당 키가 없는 경우 에러 발생
=> get 매서드 이용
- get( <키>, <기본값> ) : 딕셔너리에 해당 <키>가 있다면 값 리턴, 없다면 <기본값> 리턴 (생략시 None 리턴)
- setdefault(<키>, <기본값>): 딕셔너리에 해당 <키> 있으면 값 리턴, 없다면 <기본값>으로 값으로 딕셔너리에 저장
- collections 모듈의 defaultdict( <기본값 생성 함수> )
키가 없을 때, <기본값 생성함수>가 int 이면 기본값을 0으로, [] 이면 리스트를 자동으로 생성
(3. 1. 4) 집합
◈ 집합
- 고유한 원소만, 정렬 x 자료형
- set() 함수, {} 으로 생성
- 집합 연산(합집합, 교집합 등) 매서드 제공
[파이썬 집합 연산 매서드]
함수 | 대체 문법 | 설명 |
a.add(x) | a에 원소 x 추가 | |
a.clear() | 모든 원소 삭제 | |
a.remove(x) | a에서 원소 x 삭제 | |
a.pop() | a에서 임의의 원소 제거, a가 empty면 에러발생 | |
a.union(b) | a | b | a ∪ b |
a.update(b) | a |= b | a = a ∪ b |
a.intersection(b) | a & b | a ∩ b |
a.intersection_update(b) | a &= b | a = a ∩ b |
a.difference(b) | a - b | a, b의 차집합 |
a.difference_update(b) | a -= b | a 에 a, b 차집합 대입 |
a.symmetirc_difference(b) | a ^ b | a, b의 대칭차집합 |
a.symmetirc_difference_update(b) | a ^= b | a에 a, b의 대칭차집합 대입 |
a.issubset(b) | <= | a가 b의 부분집합이면 True |
a.issuperset(b) | >= | b가 a의 부분집합이면 True |
a.isdisjoing(b) | a, b가 서로소면 True |
- 원소는 일반적으로 불변 자료형이어야 => 리스트 원소로 갖고 싶으면 튜플로 변경해야 함
(3. 1. 5) 내장 순차 자료형 함수
◈ enumerate
- enumerate( <순차자료형>, start = 1) : <순차 자료형> 에는 리스트, 튜플 등 / start = 1 에는 시작 인덱스 (생략시 0부터)
- for 문에서 주로 사용 / ( <현재 index>, <현재 값> ) 튜플로 제공
◈ reversed
- reversed( <순차자료형> ) : <순차자료형> 역순으로 순회하는 제너레이터, set은 사용 x
(3. 1. 6) 리스트, 집합, 딕셔너리 표기법
* 리스트 표기법
[ expr for value in collection if condition] : 조건에 맞는 원소들만 리스트에 넣기
* 딕셔너리 표기법
dict_comp = {key-expr: value-expr for value in collection if condition]
* 집합 표기법
set_comp = { expr for value in collections if condition }
◈ 중첩된 리스트 표기법
- 간결한 표현이 가능 / 3개 이상 중첩 추천 x