스터디/파이썬 스터디 강의자료

[2팀/김세연] 7차시 파이썬 스터디 - 자료구조

알 수 없는 사용자 2023. 5. 11. 09:44

7차시_자료구조_강의안.pdf
1.16MB
7차시_자료구조_과제.pdf
0.15MB

디솝 - 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)])