디솝 - 7주차 자료구조
자료구조
: 데이터의 특징을 고려하여 저장하는 방법
특징이 있는 정보를 메모리에 효율적으로 저장 및 반환하는 방법으로 데이터를 관리하는 방식
특히 대용량일수록 메모리에 빨리 저장하고 검색함으로써 메모리를 효율적으로 사용해야 실행 시간을 줄일 수 있음
- 파이썬에서의 자료구조
- 스택과 큐
-스택
:Last In First Out
> 가장 마지막에 들어간 데이터가 가장 먼저 나오는 형태로 데이터의 저장 공간을 구현
ex) 택배수하물을 저장하는 방식, 팬케이크 먹을 때 ( 한 방향만 뚫린 형태 )
수화물을 하나의 데이터로 본다면 먼저 들어간 수화물보다 나중에 들어간 수화물이 먼저 나와야 하는 경우임
>수화물과 비슷한 개념의 데이터가 있다면 이러한 방식으로 저장했을 때 좀 더 쉽게 데이터를 추출할 수 있다
a = [1, 2, 3, 4, 5]
a.append(10)
print(a)
[1, 2, 3, 4, 5, 10]
a.append(20)
print(a)
[1, 2, 3, 4, 5, 10, 20]
#pop은 가장 마지막에 저장된 것이 추출, 동시에 변수는 해당 데이터 삭제
a.pop()
20
a.pop()
10
>이진수 변환기와 텍스트 역순으로 추출하는 프로그램에 활용
-이진수 변환기: 2로 나눈 나머지값을 스택에 푸시한 후 마지막으로 들어온 값부터 팝으로 추출, 출력
-큐
:스택의 반대 개념으로 ‘First in First Out’의 메모리 자료구조임
ex) 은행에서 대기 번호표,선입선출
먼저 온 사람이 앞의 번호표를 뽑고. 번호가 빠 른 사람이 먼저 서비스를 받는 구조임
메모리 개념으로 볼 때 큐는 스택보다 구현이 조금 더 복잡함
스택은 메모리가 시작하는 지점이 고정되어 있지만, 큐는 처음에 값이 저장되는 메모리 주소가 값이 사용됨에 따라 계속 바뀌게 되어 구현에 좀 더 신경 을 써야 함
파이썬에서는 이러한 부분이 자동으로 구현되므로 어렵지 않게 사용할 수 있음
- 튜플과 세트
-투플
:리스트와 같은 개념이지 만 값을 변경하는 것이 불가능한 리스트
t = (1, 2, 3) #투플 선언
print(t +t , t * 2) #투플간의 연산,인덱싱,슬라이싱, 투플 간의 덧셈,곱셉 가능
(1, 2, 3, 1, 2, 3) (1, 2, 3, 1, 2, 3)
len(t)
3
만약 튜플의 값을 변경하 고자 한다면 다음과 같이 오류가 발생함
t[l] =5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: ’tuple' object does not support item assignment
>‘튜플 오브젝트(‘tuple’ object)에는 새로운 아이템(item)의 할 당을 허용하지 않는다.’라는 내용이다. 튜플의 가장 큰 특징임
>학번이나 이름, 주민등록번호와 같이 변경되면 안 되는 정보 프로그래머가 이러한 이해 없이 마음대로 값을 변경하려고 할때 튜플은 이를 방지해주는 역할임
-세트
:순서 없이 저장하되 중복을 불허하는 자료형
(수학의 집합과 개념적으로 비슷)
ex)문서 하나에 들어가 있는 단어 종류의 개수를 셀 때 모든 단어를 추출한 후 세트로 변환 하면 단어 종류의 개수를 쉽게 파악
s = set([l, 2, 3, 1, 2, 3]) # set() 함수를 사용하여 1, 2, 3을 세트 객체로 생성
s
{1, 2, 3}
세트는 튜플과 다르게 삭제나 변경이 가능
s
{1, 2, 3}
s.add(l) # 1을 추가하는 명령이지만 중복 불허로 추가되지 않음
print(s)
{1, 2, 3}
s.remove(1) # 1 삭제
print(s)
{2, 3}
s.update([l, 4, 5, 6, 7]) # [1, 4, 5, 6, 7] 추가
print(s)
{1, 2, 3, 4, 5, 6, 7}
s.discard(3) #3 삭제
print(s)
{1, 2, 4, 5, 6, 7}
s.clear() # 모든 원소 삭제
print(s)
set()
원소 하나를 추가하는 add(), 원소 하나를 제거하는 remove()또는 discard(), 새로운 리스트를 그대로 추가하는 update(), 모든 변수를 지우는 clear()등이 있음
값은 모두 순서 없이 저장되는 동시에 중복을 제거하고 저장함.
s1 =set([l, 2, 3, 4, 5])
s2 =set([3, 4, 5, 6 ,7])
s1.union(s2) # si과 s2의 합집합
{1, 2, 3, 4, 5, 6, 7}
s1 | s2 #set([l, 2, 3, 4, 5, 6, 7])
{1, 2, 3, 4, 5, 6, 7}
s1.intersection(s2) # s1과 s2의 교집합
{3, 4, 5}
s1 & s2 #set([3, 4, 5])
{3, 4, 5}
s1.difference(s2) # s1과 s2의 차집합
{1, 2}
s1 - s2 # set([1, 2])
{1, 2}
-딕셔너리
:파이썬에서 가장 많이 사용하는 자료구조로 데이터의 유일한 구분자인 키 key라는 이름으로 검색할 수 있게 하고 실제 데이터를 값value가 있음
ex)주민등록번호나 학교의 학번. 제품 번호 등은 모두 하나의 데이터를 구분
-파이썬에서의 딕셔너리
💡 딕셔너리 변수 = {키 1:값 1, 키 2:값 2, 키 3:값 3, …}
다양한 자료형이 들어갈 수 있음
리스트와 같이 한 번에 여러 데이터를 입력한다거나,튜플 또는 세트와 같은 데이터도 사용할 수 있음 심지어 딕셔너리를 사용할 수도 있음
student_info = {20140012:'Sungchul',20140059:'Jiyong', 20140058:’Jaehong'}
-해당 변수에서 특정값을 호출하는 법
student_info[20140012]
'Sungchul
-재할당과 데이터 추가
student_info[20140012]= 'Sungchul'
student_info[20140012]
'Sungchul'
student_info[20140039]= 'Wonchul'
student_info
{20140012: 'Sungchul', 20140059: 'Jiyong', 20140058: 'Jaehong', 20140039: 'Wonchul'}
-딕셔너리 함수
:파이썬에서는 딕셔너리를 쉽게 사용할 수 있도록 다양한 함수를 제공함 특히 for문이나 if문과 함께 사용하면 다양한 코드를 작성할 수 있음
country_code = {} # 딕셔너리 생성
country_code = {"America": 1, "Korea": 82, "China": 86, "Japan": 81}
print(country_code)
{'America': 1, 'Korea': 82, 'China': 86, 'Japan': 81}
-keys() 함수 : 키만 출력하기 위함
print(country_code.keys()) # 딕시너리의 키만 출력
dict_keys(['America' 'Korea', 'China', 'Japan'])
-values() 함수 : 값을 출력하기
country_code["German"] = 49 # 딕셔너리 추가
print(country_code)
{'America': 1, 'Korea': 82, 'China': 86, 'Japan': 81, 'German': 49}
print(country_code.values()) # 딕셔너리의 값만 출력
dict_values([l, 82, 86, 81, 49])
-items() 함수 :키-값 쌍을 출력하기
print(country_code.items()) # 딕셔너리 데이터 출력
dict_items([('America',1), ('Korea', 82), ('China', 86), ('Japan', 81), ('German', 49)])
'스터디 > 파이썬 스터디 강의자료' 카테고리의 다른 글
[1팀/한규림] 7차시 파이썬 스터디 - 자료구조 (0) | 2023.05.11 |
---|---|
[2팀/김가림, 최다예] 7차시 파이썬 스터디 자료구조 (1) | 2023.05.11 |
[4팀/이제은] 7차시 파이썬 스터디 - 자료구조 (0) | 2023.05.11 |
[3팀/김규리] 7차시 파이썬 스터디 - 자료구조 (2) | 2023.05.10 |
[3팀/김경은] 7주차 파이썬 스터디 - 자료구조 (1) | 2023.05.10 |