"4. 자료구조"의 두 판 사이의 차이
둘러보기로 가기
검색하러 가기
(새 문서: 자료구조에 대한 문서. 분류:기초) |
|||
1번째 줄: | 1번째 줄: | ||
자료구조에 대한 문서. | 자료구조에 대한 문서. | ||
+ | == 개요 == | ||
+ | 여러 개의 자료형들을 담기 위한 구조. 반복자료형이라 부르기도 한다. | ||
+ | |||
+ | ===형태=== | ||
+ | {| class="wikitable" | ||
+ | !자료구조 | ||
+ | !설명 | ||
+ | !예시 | ||
+ | |- | ||
+ | |리스트 | ||
+ | |순서가 있는 객체의 집합. | ||
+ | 대괄호로 구분 [] | ||
+ | |리스트명=[1,2,3,4,5,...] | ||
+ | |- | ||
+ | |튜플 | ||
+ | |순서가 있는 객체의 집합. | ||
+ | 리스트와 달리 변경이 불가능한 구조이다. 대신 리스트보다 빠르다. | ||
+ | |||
+ | 데이터의 불변성이 중요할 경우 사용. | ||
+ | |튜플명=(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> | ||
+ | |리스트와 동일 | ||
+ | | | ||
+ | |- | ||
+ | |자료찾기 | ||
+ | |찾을 자료가 어디에 있는지 인덱스번호를 얻는다. | ||
+ | {| class="wikitable" | ||
+ | !방법 | ||
+ | !설명 | ||
+ | |- | ||
+ | |리스트명.index(자료) | ||
+ | |가장 뒤에 추가한다. | ||
+ | |- | ||
+ | | | ||
+ | | | ||
+ | |} | ||
+ | | | ||
+ | | | ||
+ | |- | ||
+ | |자료추가 | ||
+ | |다음의 방법으로 추가한다. | ||
+ | {| class="wikitable" | ||
+ | |+ | ||
+ | !방법 | ||
+ | !설명 | ||
+ | |- | ||
+ | |리스트명.append(데이터) | ||
+ | |가장 뒤에 추가한다. | ||
+ | |- | ||
+ | |리스트명.insert(인덱스, 데이터) | ||
+ | |인덱스에 해당하는 자리에 추가한다. | ||
+ | 뒤의 데이터들을 하나씩 밀어서 끼워넣는다. | ||
+ | |- | ||
+ | | | ||
+ | | | ||
+ | |} | ||
+ | |튜플에선 불가 | ||
+ | |키에 해당하는 데이터는 다음과 같이 넣을 수 있다. | ||
+ | 사전명["키"]=데이터 | ||
+ | |- | ||
+ | |자료수정 | ||
+ | |해당 데이터 위치에 데이터를 대입하면 된다. | ||
+ | <code>리스트명[3]=데이터</code> 형태로 명령하면 4번째 데이터가 수정된다. | ||
+ | |튜플에선 불가 | ||
+ | |해당하는 키에 대입하면 수정된다. | ||
+ | 사전명["키"]=데이터 | ||
+ | |- | ||
+ | |자료삭제 | ||
+ | |인덱스를 사용하느냐, 값을 사용하느냐에 따라 두 가지로 나눈다. | ||
+ | {| class="wikitable" | ||
+ | !방법 | ||
+ | !설명 | ||
+ | |- | ||
+ | |del 리스트명[인덱스] | ||
+ | |해당하는 데이터를 지운다. | ||
+ | |- | ||
+ | |리스트명.remove(데이터) | ||
+ | |데이터에 해당하는 값을 지운다. | ||
+ | |} | ||
+ | |튜플에선 불가 | ||
+ | | | ||
+ | |- | ||
+ | |구조변경 | ||
+ | |list(자료구조) 형태로 다른 자료구조를 리스트로 만들 수 있다. | ||
+ | | | ||
+ | | | ||
+ | |} | ||
+ | ==자료파악== | ||
+ | {| class="wikitable" | ||
+ | !의도 | ||
+ | !설명 | ||
+ | |- | ||
+ | |자료의 경우, 그 길이를 파악하고, | ||
+ | 자료구조의 경우, 자료의 개수를 파악한다. | ||
+ | |len(데이터) | ||
+ | |} | ||
+ | =자료조작= | ||
+ | ==리스트 관련== | ||
+ | 튜플에선 수정이 불가능해 쓸 수 없고, 딕셔너리에선 의미없는 방식이다. | ||
+ | {| class="wikitable" | ||
+ | !의도 | ||
+ | !설명 | ||
+ | ! | ||
+ | |- | ||
+ | |오름차순으로 정렬한다.(내림차순은 리버스함수를 이용) | ||
+ | |리스트.sort() | ||
+ | | | ||
+ | |- | ||
+ | |리스트의 값을 역순으로 뒤집는다. | ||
+ | |리스트.reverse() | ||
+ | | | ||
+ | |} | ||
+ | {| class="wikitable" | ||
+ | |리스트명.pop(자료) | ||
+ | |데이터를 사용하고 지운다. | ||
+ | |} | ||
+ | ==딕셔너리 관련== | ||
+ | ====데이터 추출==== | ||
+ | {| class="wikitable" | ||
+ | !의도 | ||
+ | !방법 | ||
+ | !설명 | ||
+ | |- | ||
+ | |키 값만 뽑아오고 싶다. | ||
+ | |사전명.keys() | ||
+ | |키값들을 리스트로 얻어온다. | ||
+ | |- | ||
+ | |자료값만 뽑아오고 싶다. | ||
+ | |사전명.values() | ||
+ | |자료값들을 리스트로 얻어온다. | ||
+ | |- | ||
+ | |둘을 한 쌍으로 뽑아오고 싶다. | ||
+ | |사전명.items() | ||
+ | |자료값 쌍을 2차원 리스트로 얻어온다. | ||
+ | |} | ||
+ | ====딕셔너리 조작==== | ||
+ | {| class="wikitable" | ||
+ | !의도 | ||
+ | !방법 | ||
+ | !설명 | ||
+ | |- | ||
+ | |두 사전을 합치고 싶다. | ||
+ | |사전명.update(덮을 사전명) | ||
+ | |뒤의 내용을 앞의 사전에 덮어씌운다.(키가 겹치는 경우, 키가 없다면 추가한다.) | ||
+ | |} | ||
+ | ==집합 관련== | ||
+ | 정의하려면 <code>집합명={}</code> 이 아닌, <code>집합명=set()</code> 형태로 정의해야 한다. 앞처럼 하면 빈 사전이 생성된다. | ||
+ | {| class="wikitable" | ||
+ | !의도 | ||
+ | !방법 | ||
+ | !설명 | ||
+ | |- | ||
+ | |교집합 찾기 | ||
+ | |집합명1 & 집합명2 | ||
+ | |두 집합에 동시에 들어간 원소들만 얻어진다. | ||
+ | |- | ||
+ | |합집합 찾기 | ||
+ | |<nowiki>집합명1 | 집합명2</nowiki> | ||
+ | |파이프연산자를 통해 두 집합의 합집합을 구한다. | ||
+ | |- | ||
+ | |차집합 | ||
+ | |집합명1 - 집합명2 | ||
+ | |집합1에서의 집합2의 차집합을 구한다.(교집합을 빼는 것과 동일) | ||
+ | |} | ||
[[분류:기초]] | [[분류:기초]] |
2021년 3월 30일 (화) 20:04 판
자료구조에 대한 문서.
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][2][0] 형태로 접근 가능 |
리스트와 동일 | 키에 접근하면 된다.
| ||||||||
여러
자료접근 |
문자열의 슬라이싱과 동일하다.
리스트명[시작번호:끝번호] #시작번호와 같은 것부터 끝번호보다 작은 것까지 가져온다. 리스트명[ :5], 리스트명[-1: ] 형태로 사용도 가능. |
리스트와 동일 | |||||||||
자료찾기 | 찾을 자료가 어디에 있는지 인덱스번호를 얻는다.
|
||||||||||
자료추가 | 다음의 방법으로 추가한다.
|
튜플에선 불가 | 키에 해당하는 데이터는 다음과 같이 넣을 수 있다.
사전명["키"]=데이터 | ||||||||
자료수정 | 해당 데이터 위치에 데이터를 대입하면 된다.
|
튜플에선 불가 | 해당하는 키에 대입하면 수정된다.
사전명["키"]=데이터 | ||||||||
자료삭제 | 인덱스를 사용하느냐, 값을 사용하느냐에 따라 두 가지로 나눈다.
|
튜플에선 불가 | |||||||||
구조변경 | list(자료구조) 형태로 다른 자료구조를 리스트로 만들 수 있다. |
3 자료파악
의도 | 설명 |
---|---|
자료의 경우, 그 길이를 파악하고,
자료구조의 경우, 자료의 개수를 파악한다. |
len(데이터) |
4 자료조작
4.1 리스트 관련
튜플에선 수정이 불가능해 쓸 수 없고, 딕셔너리에선 의미없는 방식이다.
의도 | 설명 | |
---|---|---|
오름차순으로 정렬한다.(내림차순은 리버스함수를 이용) | 리스트.sort() | |
리스트의 값을 역순으로 뒤집는다. | 리스트.reverse() |
리스트명.pop(자료) | 데이터를 사용하고 지운다. |
4.2 딕셔너리 관련
4.2.1 데이터 추출
의도 | 방법 | 설명 |
---|---|---|
키 값만 뽑아오고 싶다. | 사전명.keys() | 키값들을 리스트로 얻어온다. |
자료값만 뽑아오고 싶다. | 사전명.values() | 자료값들을 리스트로 얻어온다. |
둘을 한 쌍으로 뽑아오고 싶다. | 사전명.items() | 자료값 쌍을 2차원 리스트로 얻어온다. |
4.2.2 딕셔너리 조작
의도 | 방법 | 설명 |
---|---|---|
두 사전을 합치고 싶다. | 사전명.update(덮을 사전명) | 뒤의 내용을 앞의 사전에 덮어씌운다.(키가 겹치는 경우, 키가 없다면 추가한다.) |
4.3 집합 관련
정의하려면 집합명={}
이 아닌, 집합명=set()
형태로 정의해야 한다. 앞처럼 하면 빈 사전이 생성된다.
의도 | 방법 | 설명 |
---|---|---|
교집합 찾기 | 집합명1 & 집합명2 | 두 집합에 동시에 들어간 원소들만 얻어진다. |
합집합 찾기 | 집합명1 | 집합명2 | 파이프연산자를 통해 두 집합의 합집합을 구한다. |
차집합 | 집합명1 - 집합명2 | 집합1에서의 집합2의 차집합을 구한다.(교집합을 빼는 것과 동일) |