파이썬에는 다섯 가지 자료구조가 있다.
- 리스트(list) : 순서가 있으며 수정이 가능한 일련의 요소들
- 튜플(tuple) : 순서가 있으며 수정이 불가능한 일련의 요소들
- 세트(set) : 순서가 없는 요소들의 묶음
- 딕셔너리(dictionary) : 순서가 없는 키-값 쌍의 묶음
- 데이터 프레임(dataframe) : 이차원 데이터를 저장하기 위한 이차원 구조
리스트
파이썬에서 리스트는 수정 가능한 일련의 요소들을 저장하는 데 주로 사용하는 자료구조이다.
리스트에 저장되는 요소들의 자료 유형은 모두 같지 않아도 된다.

리스트를 이용하면 수정 가능한 일차원 자료 구조를 매우 쉽게 생성할 수 있다. 이는 알고리즘이 작동할 때 내부에서 만들어 내는 임시 데이터를 다루는 데 매우 유용하다.
리스트 사용하기
- 리스트 인덱싱 : 리스트에 담긴 요소들의 위치는 고정되어 있다. 따라서 인덱스를 이용해 리스트의 특정 위치에 존재하는 요소에 접근할 수 있다.

bin_color의 'Red'의 index는 0 , 'Green'의 index는 1, 'Blue'의 index는 2 , 'Yellow'의 index는 3이 된다.
리스트의 인덱스 1에 접근을 하면 Green이 출력되게 된다.
- 리스트 슬라이싱 : 인덱스의 범위를 지정하여 리스트가 일부에 접근하는 것을 슬라이싱이라고 한다.



시작 인덱스가 지정되지 않았다면 리스트의 첫 요소부터 범위에 포함된다. 반대로, 종료 인덱스가 지정되지 않았다면 리스트의 마지막 요소가 범위에 포함된다.
- 네거티브 인덱싱 : 파이썬에서는 리스트의 끝에서부터 거꾸로 세는 음수 인덱스가 있다. 기준점을 첫 번째 요소 대신 마지막 요소로 사용할 수 있다.

- 내포(nesting) : 리스트에 담긴 요소의 유형은 단순할 수도 있고 복잡할 수도 있다. 즉 리스트를 리스트 안에 넣을 수 있다는 의미이다. 반복적이거나 재귀적인 알고리즘을 사용할 때 내포는 아주 중요한 기능을 제공한다.

- 반복(iteration) : 파이썬은 for 루프를 통해서 리스트 안에 든 요소들을 반복적으로 처리할 수 있다.

람다 함수
리스트에 사용할 수 있는 람다 함수는 다양하다. 람다 함수는 알고리즘 맥락에서 매우 중요하며 함수를 즉시 생성할 수 있다는 것이 특징이다. 람다 함수의 또 다른 이름은 익명 함수이다.
- 데이터 필터링 : 데이터를 필터링하려면 먼저 조건함수를 설정해야 합니다. 조건 함수는 단일 인수를 입력받아 불 값을 반환한다..

파이썬의 필터 함수는 일반적으로 람다와 함께 사용된다. 람다는 리스트 외에도 튜플 또는 세트의 요소를 필터릴 할 수 있다.
- 데이터 변환 : 맴 함수는 람다 함수를 이용해 데이터를 변환한다.

맵함수와 함께 사용할 경우 람다함수로 변환방식을 설정하고 이를 이요해 리스트안에 든 요소들을 변환할 수 있다.
위는 리스트의 각데이터를 제곱한다.
- 데이터집계 : 리스트를 순회하면서 값 쌍을 재귀적으로 처리하는 리듀스 함수를 사용한다.

리듀스 함수를 사용할 때는 데이터 집계함수를 집계해야한다. 집계함수는 doSum 첫 두요소를 처리한후 그 결과로 치환한다. 이 축소과정을 지나면 한개의 값이 남는다.
range 함수
range함수 를 사용하면 숫자로 구성된 큰 리스트를 쉽게 생성할 수 있다.


리스트의 시간 복잡도
연산작업 | 시간복잡도 |
요소삽입 | O(1) |
요소제거 | O(n)(최악의 경우 전체리스트를 순회해야한다.) |
리스트 슬라이싱 | O(n) |
요소접근 | O(n) |
복사 | O(n) |
리스트에 요소를 추가하흔 것은 리스트크긱와 관계가 없다. 다른 모든 연산작업의 시간복잡도는 리스트의 크기에 의존적이다. 리스트 크기가 커짐에 따라 성능에 미치는 영향도 그만큼 증가한다.
튜플
데이터 컬렉션을 저장할 수 있는 두 번째 자료 구조는 튜플이다.리스트와 달리 튜플은 수정할 수 없는 자료구조로 읽기만 가능하다.

- 튜플의 시간 복잡도
튜플에서 요소추가 작업은 기존 튜플의 맨 마지막에 요소를 추가한다. 이 작업의 시간 복잡도는 O(1)이다.
딕셔너리
데이터를 키-값 쌍으로 저장해 두는 것은 분산 알고리즘에서 아주 중요합니다.

- 키값에 대응하는 값에 접근하기 위해서는 get 함수를 사용하거나 해당키를 인덱스로 사용한다.

- 키에 대응하는 값을 갱신하는 방법은 다음과 같다.

- 딕셔너리의 시간복잡도
키 또는 값에 접근
연산작업 | 시간복잡도 |
키 또는 값에 접근 | O(1) |
키 또는 값에 설정 | O(1) |
딕셔너리 복사 | O(n) |
세트
세트는 여러 유형으로 구성된 요소의 컬렉션으로 정의할 수 있다. 세트의 요소들은 {}로 묵여 있다.

동일한 요소를 추가하면 세트는 이를 무시한다.

이 코드 스니펫처럼 파이썬의 세트는 합집합과 교집합 연산을 지원한다.
- yellow|red : 합집합
- yellow&red : 교집합
세트의 시간 복잡도
연산작업 | 시간 복잡도 |
요소 추가 | O(1) |
요소 제거 | O(1) |
복사 | O(n) |
데이터 프레임
데이터 프레임은 파이썬 pandas라이브러리에서 제공하는 자료구조로, 테이블형 데이터를 저장하는 데 널리 사용한다.
!pip install pandas
위의 코드를 통해 라이브러리를 설치한다.
import pandas as pd
df = pd.DataFrame([['11','Fares',32,True],['2','Elena',23,False],['3','Steven',40,True]])
df.columns =['id','name','age','decision']
df

위와 같은 결과가 도출된다.
데이터프레임의 용어
- 축(axis) : pandas 문서에서 데이터프레임의 개별 열이나 행을 축이라고 한다.
- 축들(axes) : 둘 이상의 축을 묶어 축들이라고 한다.
- 라벨(label) : 데이터프레임은 열과행에 이름을 지을 수 있으며 이 이름을 라벨이라 한다.
데이터프레임의 부분 집합 생성하기
열선택
df[['name','age']]


열 이름 또는 인덱스를 이용하면 출력이 가능하다. 왼쪽은 이름을 통한 출력 , 오른쪽은 인덱스를 통한 세번째 열의 출력이다.
행 선택
- 인덱스 사용하기
- 필터 사용하기


왼쪽 사진은 1,2 행을 출력하고 오른쪽은 필터를 이용하여 출력을 한다.
행렬
고정된 수의 열과 행을 가진 이차원자료구조 이다. 파이썬의 numpy 배열을 사용하여 행렬을 만들 수있다.
pandas설치시 같이 설치된다.

transpose로 행과 열을 변경할 수 있다.
'Python' 카테고리의 다른 글
42. PYTHON - 정렬 알고리즘 (1) | 2022.11.24 |
---|---|
41. PYTHON - 추상화 자료 유형 파악하기 (0) | 2022.11.23 |
39.PYTHON - 알고리즘 검증하기 (0) | 2022.11.17 |
38. PYTHON 알고리즘 - 성능 분석하기 (0) | 2022.11.17 |
37. python 미니콘다 설치하기 (0) | 2022.11.16 |