"4. 자료구조"의 두 판 사이의 차이
180번째 줄: | 180번째 줄: | ||
|리스트명.pop(자료) | |리스트명.pop(자료) | ||
|데이터를 사용하고 지운다. | |데이터를 사용하고 지운다. | ||
+ | |} | ||
+ | |||
+ | === list와 json === | ||
+ | 다른 서비스나 서버로 데이터를 전달할 땐 json으로 변환하여 전달해야 한다.(각자 데이터를 처리하는 방식이 달라서..) | ||
+ | {| class="wikitable" | ||
+ | !의도 | ||
+ | !설명 | ||
+ | !방법 | ||
+ | |- | ||
+ | |list를 json으로 | ||
+ | |사전을 json화 하는 것도 방법은 같다. | ||
+ | |json.dumps(list) | ||
+ | |- | ||
+ | |json을 list로 | ||
+ | |사실, json은 사전 구조와 같다. 사전으로 받아진다. | ||
+ | |json_data = json.loads(data) | ||
+ | |||
+ | 예시) json_data['키'] | ||
|} | |} | ||
==딕셔너리 관련== | ==딕셔너리 관련== |
2023년 1월 12일 (목) 16:36 판
자료구조에 대한 문서.
1 개요
여러 개의 자료형들을 담기 위한 구조. 반복자료형이라 부르기도 한다.
1.1 형태
자료구조 | 설명 | 예시 |
---|---|---|
리스트 | 순서가 있는 객체의 집합.
대괄호로 구분 [] |
리스트명 = [1,2,3,4,5,...] |
튜플 | 순서가 있는 객체의 집합.
리스트와 달리 변경이 불가능한 구조이다. 대신 리스트보다 빠르다. 데이터의 불변성이 중요할 경우 사용. |
튜플명 = (1,2,3,4,5, ...) |
딕셔너리 | 순서가 없는 객체의 집합.
인덱스가 아닌, 키워드와 1대1 대응을 시켜둔 자료구조. |
사전명 = {"key1":value, "key2":value, ...} |
집합 | 중복이 없는 원소집합. 중복된 걸 생성해도 하나만 존재한다.
원소가 순서대로 저장되는 것이 아닌, 오름차순으로 재배치된다. |
집합명 = {'a', 'b', ...} |
2 사용법
자료구조 안에 자료구조를 넣어 보다 높은 차원의 자료구조를 만들 수 있다.
리스트 | 튜플 | 딕셔너리 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
정의 | 리스트명 = [데이터] | 튜플명 = (데이터) | 사전명 = {"key1":value, "key2":value, ...}
| ||||||||||
자료접근 | 리스트명[인덱스]
0부터 시작한다.
리스트명[-1] 형태로 뒤에서부터 접근 가능. 여러 차원으로 되어있는 경우, 리스트명[1][2][0] 형태로 접근 가능 |
리스트와 동일 | 키에 접근하면 된다.
| ||||||||||
여러
자료접근 |
문자열의 슬라이싱과 동일하다.
리스트명[시작번호:끝번호] #시작번호와 같은 것부터 끝번호보다 작은 것까지 가져온다. 리스트명[ :5], 리스트명[-1: ] 형태로 사용도 가능. |
리스트와 동일 | 사전은 기본적으로 순서가 없지만, 생성 시 객체=OrderedDict() 으로 만들면 순서를 갖는다.
순서 있는 사전을 사용하면 for문 등에서 순서대로 실행도 가능하다. | ||||||||||
자료찾기 | 찾을 자료가 어디에 있는지 인덱스번호를 얻는다.
|
||||||||||||
자료추가 | 다음의 방법으로 추가한다.
|
튜플에선 불가 | 키에 해당하는 데이터는 다음과 같이 넣을 수 있다.
사전명["키"]=데이터 | ||||||||||
자료수정 | 해당 데이터 위치에 데이터를 대입하면 된다.
|
튜플에선 불가 | 해당하는 키에 대입하면 수정된다.
사전명["키"]=데이터 | ||||||||||
자료삭제 | 인덱스를 사용하느냐, 값을 사용하느냐에 따라 두 가지로 나눈다.
|
튜플에선 불가 |
| ||||||||||
구조변경 | list(자료구조) 형태로 다른 자료구조를 리스트로 만들 수 있다. | tuple(자료구조) |
3 자료파악
의도 | 설명 |
---|---|
자료의 경우, 그 길이를 파악하고,
자료구조의 경우, 자료의 개수를 파악한다. |
len(데이터) |
4 자료조작
4.1 리스트 관련
튜플에선 수정이 불가능해 쓸 수 없고, 딕셔너리에선 의미없는 방식이다.
의도 | 설명 | |
---|---|---|
오름차순으로 정렬한다.(내림차순은 리버스함수를 이용) | 리스트.sort() | |
리스트의 값을 역순으로 뒤집는다. | 리스트.reverse() |
리스트명.pop(자료) | 데이터를 사용하고 지운다. |
4.1.1 list와 json
다른 서비스나 서버로 데이터를 전달할 땐 json으로 변환하여 전달해야 한다.(각자 데이터를 처리하는 방식이 달라서..)
의도 | 설명 | 방법 |
---|---|---|
list를 json으로 | 사전을 json화 하는 것도 방법은 같다. | json.dumps(list) |
json을 list로 | 사실, json은 사전 구조와 같다. 사전으로 받아진다. | json_data = json.loads(data)
예시) json_data['키'] |
4.2 딕셔너리 관련
4.2.1 데이터 추출
의도 | 방법 | 설명 |
---|---|---|
키 값만 뽑아오고 싶다. | 사전명.keys() | 키값들을 리스트로 얻어온다. |
자료값만 뽑아오고 싶다. | 사전명.values() | 자료값들을 리스트로 얻어온다. |
둘을 한 쌍으로 뽑아오고 싶다. | 사전명.items() | 자료값 쌍을 2차원 리스트로 얻어온다.
딕셔너리에서 for문을 사용하려면 items()를 사용해 다음과 같이 돌려야 한다.for key, value in 사전명.items():
key + value... 등 조작.
|
최소값을 갖는 인덱스 | 인덱스 = min(사전, key=사전.get) |
4.2.2 딕셔너리 조작
의도 | 방법 | 설명 |
---|---|---|
두 사전을 합치고 싶다. | {**사전명1, **사전명2} | 뒤의 내용을 앞의 사전에 덮어씌운다.(키가 겹치는 경우, 키가 없다면 추가한다.) |
4.3 집합 관련
정의하려면 집합명 = {}
이 아닌, 집합명 = set()
형태로 정의해야 한다. 앞처럼 하면 빈 사전이 생성된다.
의도 | 방법 | 설명 |
---|---|---|
교집합 찾기 | 집합명1 & 집합명2 | 두 집합에 동시에 들어간 원소들만 얻어진다. |
합집합 찾기 | 집합명1 | 집합명2 | 파이프연산자를 통해 두 집합의 합집합을 구한다. |
차집합 | 집합명1 - 집합명2 | 집합1에서의 집합2의 차집합을 구한다.(교집합을 빼는 것과 동일) |
4.4 공통
의도 | 방법 | 설명 |
---|---|---|
새로운 리스트로 정렬 | sorted(자료형) | 리스트, 문자열, 튜플 등 모두에서 사용 가능. 가존 반복자료형을 복사하여 새로운 리스트로 정렬한다.(기존 자료형은 유지.) |
자료구조 합치기 | 자료구조.extend(자료구조) | 자료구조끼리 합친다. |
5 궁금
리스트를 +로 합하면 어떻게 될까?
6 관련에러
6.1 'method' object is not subscriptable
사전에서 get을 쓰면 get('user')로 써야 하는데, get['user'] 등 괄호를 잘못 쓴 경우 발생하는 에러이다.
6.2 django cannot unpack non-iterable object
튜플, 리스트를 변수로 받을 때 변수의 갯수와 자료구조 안의 데이터 갯수가 다를 경우에 발생한다.
예를 들어 변수1, 변수2 = (1)
에서 좌우의 데이터 갯수가 다른데, 이럴 때 발생한다. 이 경우엔 데이터 하나에 여러 변수를 대응시킬 때!