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