티스토리 뷰
* 특징이 있는 정보는 어떻게 저장하면 좋을까?
- 전화번호부, 은행 번호표, 서적 정보, 창고에 쌓인 수화물 위치를 역순으로 찾을 때?
[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)
'AI > Python' 카테고리의 다른 글
[python] Pythonic code(split, join, list comprehension, enumerate, zip), 레거시(lambda, map, reduce) (2) | 2024.06.12 |
---|---|
[python] 모듈(collections) (2) | 2024.06.09 |
[Python] 문자열, 함수 (0) | 2024.06.06 |
[Python] 조건문, 반복문, 디버깅 (2) | 2024.06.05 |
[프로그래머스 기초] Day 12,13,14,15 문자열, 리스트 (0) | 2024.06.05 |
- Total
- Today
- Yesterday
- 뉴스
- 오블완
- 갓생
- 아침
- 미라클모닝
- 스크랩
- 습관
- 티스토리챌린지
- 프로그래머스
- Python
- IH
- SQL
- 30분
- ChatGPT
- 오픽
- llm
- Ai
- opic
- 빅데이터 분석기사
- 경제
- 줄넘기
- 다이어트
- 운동
- 루틴
- 아침운동
- 고득점 Kit
- 영어회화
- C언어
- 실기
- 기초
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |