티스토리 뷰

* 특징이 있는 정보는 어떻게 저장하면 좋을까?

- 전화번호부, 은행 번호표, 서적 정보, 창고에 쌓인 수화물 위치를 역순으로 찾을 때?

 

[1] 파이썬의 기본 데이터 구조

- 스택과 큐 (stack & queue with list)

- 튜플과 집합(tuple & set)

- 사전(dictionary)

- collection 모듈

 

(1) 스택 Stack (층층이 쌓는 것)

- 나중에 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조

- ex. 택배상자

- Last in First Out(LIFO)

- Data의 입력을 Push, 출력을 Pop이라고 함

- 리스트로 구현 가능(push를 append(), pop을 pop()* pop은 리턴값이 있음+원래 값 변경)

* sort()는 return 없음, sorted()는 return 해줌

push 구현 append() pop 구현 pop()
a= [1,2,3,4,5]
print(a.append(6)) # None * return 해주지 않아서
print(a) # [1,2,3,4,5,6]
a= [1,2,3,4,5]
print(a.pop()) # 5 * return해줌
print(a) # [1,2,3,4]

 

(2) 큐 Queue

- 먼저 넣은 데이터를 먼저 반환하도록 설계된 메모리 궂

- First In First Out (FIFO)

- stack과 반대되는 개념

- 리스트로 구현 가능 (put을 append(), get을 pop(0)

put 구현 append() get 구현 pop(0)
a= [1,2,3,4,5]
print(a.append(6)) # None * return 해주지 않아서
print(a) # [1,2,3,4,5,6]
a= [1,2,3,4,5]
print(a.pop()) # 1 * return해줌
print(a) # [2,3,4,5]

 

(3) 튜플 tuple

- 값의 변경이 불가능한 리스트

- 선언시 [ ] 가 아닌 ( ) 를 사용

- 리스트의 연산, 인덱싱, 슬라이싱 등을 동일하게 사용

- 왜쓸까? 함수의 반환 값 등 사용자의 실수에 의한 에러를 사전에 방지하기 위함

- 프로그램을 작동하는 동안 변경되지 않은 데이터의 저장 (학번, 이름, 우편번호 등)

- 값이 하나인 튜플은 반드시 ","를 붙여야 함

t= (1) t=(t,)
t=(1) 
print(t)  #1 
print(type(t)) # int
t1=(1,)
print(t1) # (1,)
print(type(t1)) # tuple
print(len(t1)) # 1

 

(4) 집합 set

- 값을 순서없이 저장, 중복 불허 하는 자료형

- set 객체 선언을 이용하여 객체 생성

- { } 를 사용

- set(리스트) => { 중복없는 데이터로 바꿔줌 }

1개 추가 : add(), 여러개추가: update(list) 특정 값 삭제 : remove(), discard(), 모든 원소삭제 : clear()
a = {1,2,3,4}
print(a.add(5)) # None
print(a) # {1,2,3,4,5}

a = {1,2,3,4}
print(a.update([5,6,7,8]))  # None
print(a)  # {1, 2, 3, 4, 5, 6, 7, 8}
a = {1,2,3,4}
print(a.remove(4)) # None
print(a) # {1,2,3}

a = {1,2,3,4}
print(a.discard(3)) # None
print(a) # {1,2,4}

a = {1,2,3,4}
print(a.clear()) # None
print(a) # set()
print(len(a)) # 0 
print(a is None) # False
합집합 :  union(), | 교집합: intersection(), &
s1 = {1,2,3,4}
s2 = {3,4,5,6}

print(s1.union(s2)) # {1,2,3,4,5,6} *중복제거니까
print(s1|s2)  # {1,2,3,4,5,6}
s1 = {1,2,3,4}
s2 = {3,4,5,6}
 
print(s1.intersection(s2)) # {3,4}
print(s1&s2) # {3,4}
차집합: difference(), -  
s1 = {1,2,3,4}
s2 = {3,4,5,6}

print(s1.difference(s2)) # {1,2}
print(s1-s2) # {1,2}
 

 

(5) 사전 dictionary

- 데이터를 저장 할 때는 구분 지을 수 있는 값을 함께 저장

예) 주민등록번호, 제품모델번호

- 구분을 위한 데이터 고유값을 Identifier 또는 Key라고 함

- Key 값을 활용하여, 데이터 값(Value)를 매칭하여 관리함

예) 학생정보 = {20140012: '성철'}

- 다른 언어에서는 Hash Table 이라는 용어를 사용(조금 다르긴 함)

- 생성: { 키 : 값 } 또는 dict()

생성 및 조회 for문에 사용, 데이터 타입 확인
student_info= {"name" : "홍길동", 20 : "age" }

print(student_info)
# {'name': '홍길동', 20: 'age' }
print(type(student_info)) # <class 'dict'>

print(student_info.items())
# dict_items([('name', '홍길동'), (20, 'age')])
print(type(student_info.items())) # <class 'dict_items'>
student_info= {"name" : "홍길동", 20 : "age"}

for i in student_info: # 키 값만
  print("그냥",i, type(i))
# 그냥 name <class 'str'>
# 그냥 20 <class 'int'>

for i in student_info.items(): # 키랑 값 쌍으로
  print("items",i, type(i))
# items ('name', '홍길동') <class 'tuple'>
=> 튜플형이기 때문에 바꿀수 없음!! 읽기만 가능
# items (20, 'age' ) <class 'tuple'>

for x,y in student_info.items():  # 튜플이므로 언패킹
  print(x,y) 

# name 홍길동
# 20 age
키 값만 출력: keys() 값만 출력: .values()
student_info= {"name" : "홍길동", 20 : "age" }

print(student_info.keys()) # dict_keys(['name', 20])
print(type(student_info.keys())) # <class 'dict_keys'>
student_info= {"name" : "홍길동", 20 : "age" }

print(student_info.values()) # dict_values(['홍길동', 'age'])
print(type(student_info.values())) # <class 'dict_values'="">
새로운 키 추가 : 딕셔너리이름[키] =값  새로운 키에 값 변경
student_info= {"name" : "홍길동", 20 : "age" }

student_info["학번"] = 20240101
print(student_info)

# {'name': '홍길동', 20: 'age', '학번': 20240101}
student_info= {"name" : "홍길동", 20 : "age" }

student_info["name"] = "김말자"
print(student_info)

# {'name': '김말자', 20: 'age', '학번': 20240101}
특정 키 값 찾기 특정 값 찾기
student_info= {"name" : "홍길동", 20 : "age" }

print("name" in student_info.keys()) # True
print("학번" in student_info.keys()) # False
student_info= {"name" : "홍길동", 20 : "age" }

print("age" in student_info.values()) # True
print(20 in student_info.values()) # False

 

* Command Analyzer

- Command: 사용자가 서버에 명령어를 입력한 명령어

ex. 어떤 사용자가 얼마나 많이 명령어를 입력하였을까?

 


※ 출처 : 네이버 부스트코스 - 인공지능 기초 다지기(https://www.boostcourse.org/ai100)

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함