새소식

활동들/인프런 대학생 LEAF 2기

[인프런 리프 2기] 4. 파이썬 데이터 모델

  • -
728x90

3주차 미션: 섹션 4 ~ 5

 

섹션 4에서는 파이썬 시퀀스(sequence)를 제목으로 하여 시퀀스 형을 비롯한 다양한 자료구조에 대해 배웠다.

항상 쓰던 것들도 있었고 새롭게 배운 것들도 있었다.

 

섹션 4에서 아래 내용을 배울 수 있었다.

🌱 01

  • 파이썬 데이터 타입 상세 분류
  • 지능형 리스트(Comprehending Lists), 튜플, 딕셔너리
  • Array 실습
  • 지능형 리스트 주의할 점

🚩 리스트 고급

- Mutable

- Comprehending Lists >>빠르다>> for

- Comprehending Lists + Map, Filter : 조건 적용

code_list3 = [ord(s) for s in chars if ord(s) > 40]
code_list4 = list(filter(lambda x : x > 40, map(ord, chars)))

# 주의
marks1 = [['~'] * 3 for _ in range(4)] # 모두 다른 주소값
marks2 = [['~'] * 3] * 4 # 하나의 주소값이 4번 복사

🚩 Generator

- 한 번에 한 개의 항목을 생성(메모리 유지X)

: 작은 메모리 조각으로 연속되는 label을 만들어낼 수 있다.

tuple_g = (ord(s) for s in chars) # 괄호!
print(('%s' % c + str(n) for c in ['A', 'B', 'C', 'D'] for n in range(1, 21)))

 

🌱 02

  • 튜플(Tuple) 고급 사용
  • Mutable(가변)
  • Immutable(불변)
  • Sort vs Sorted 실습

🚩 튜플 고급

- Unpacking

- Immutable

x, y, *rest = range(10)
print(x, y, rest)	# 0 1 [2, 3, 4, 5, 6, 7, 8, 9]
x, y, *rest = range(2)
print(x, y, rest)	# 0 1 []
x, y, *rest = 1, 2, 3, 4, 5
print(x, y, rest)	# 1 2 [3, 4, 5]

🚩 sort vs sorted

- reverse, key=len, key=str.lower, key = func...

- sorted: 정렬 후 새로운 객체 반환 -> 원본 유지

- sort: 정렬 후 객체 직접 변경 -> 원본 수정

 

🚩 List vs Array 적합한 사용법

- 리스트 기반: 융통성, 다양한 자료형, 범용적 사용

- 숫자 기반: 배열(리스트와 거의 호환)

 

🌱 03

  • 해시테이블(Hashtable)
  • Dict 생성 고급 예제
  • Setdefault 사용법

🚩 Hash

- 해시함수: 불변의 값으로 이루어져야 한다.

t1 = (10, 20, (30, 40, 50))
t2 = (10, 20, [30, 40, 50])

print(hash(t1)) # 해시함수 : 불변의 값으로 이루어져야 한다.
# print(hash(t2)) # 예외 : TypeError -> list는 해쉬값을 뽑을 수 없다.

🚩 Setdefault

- tuple -> dict

source = (('k1', 'val1'),
          ('k1', 'val2'),
          ('k2', 'val3'),
          ('k2', 'val4'),
          ('k2', 'val5'))

new_dict1 = {}
new_dict2 = {}

# No use Setdefault
for k, v in source:
    if k in new_dict1:
        new_dict1[k].append(v)
    else:
        new_dict1[k] = [v]

print(new_dict1)

# USe Setdefault
for k, v in source:
    new_dict2.setdefault(k, []).append(v) # [] 대신 () 사용 시, tuple은 update가 불가하여 error 발생

print(new_dict2)

 

🌱 04

  • 해시테이블(Hashtable)
  • Immutable Dict 생성
  • 지능형 Set
  • Set 선언 최적화

- 읽기 전용(Read Only) Dict, Set을 만들 수 있다.

 

🚩 immutable Dict

d_frozen = MappingProxyType(d) # hash: read only로 바꼈을 뿐, hash 함수 여전히 지원 X

# 수정 불가
# d_frozen['key2'] = 'value2' # Error 발생

🚩 Set

s1 = {'Apple', 'Orange', 'Apple', 'Orange', 'Kiwi'}
s2 = set(['Apple', 'Orange', 'Apple', 'Orange', 'Kiwi'])
s3 = {3}
s4 = set() # set 명시적 선언 필요, {} -> dictionary
s5 = frozenset({'Apple', 'Orange', 'Apple', 'Orange', 'Kiwi'})

# 추가 불가
# s5.add('Melon') # Error: frozenset은 add 함수 자체가 없음

- 지능형 집합(Compreheding Set)

print({chr(i) for i in range(0, 256)})

# from unicodedata import name
# print({name(chr(i), '') for i in range(0, 256)})

🚩 선언 최적화

from dis import dis

print('------')
print(dis('{10}')) # 더 빠르다
print('------')
print(dis('set([10])'))

 

총 정리

# Chapter04
# 시퀀스형
# 컨테이너(Container : 서로 다른 자료형[List, tuple, collections.deque])
# 플랫(Flat : 한 개의 자료형[str, bytes, bytearray, array.array, memoryview])
# 가변(list, bytearray, array.array memoryview, deque)
# 불변(tuple, str, bytes)
# 해시테이블 ⭐
# Key에 Value를 저장하는 구조
# 파이썬 dict 해쉬 테이블 예
# 키 값의 연산 결과(해쉬 값)에 따라 직접(Direct) 접근이 가능한 구조
# key 값을 해싱 함수 -> 해쉬 주소 -> key에 대한 value 참조
# 해시테이블(hashtable) -> 적은 리소스로 많은 데이터를 효율적으로 관리
# dict -> Key 중복 허용 X, Set -> 중복 허용 X

 

 

 

강의 링크:

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original)

 

우리를 위한 프로그래밍 : 파이썬 중급 (Inflearn Original) - 인프런 | 강의

본 강의는 파이썬 기초를 배운 학습자가 파이썬을 실무에 활용할 수 있도록 수준 높은 문법을 배우는 데 중점을 두고 있습니다. 파이썬만의 차별점을 파악하고 빠르게 익힘으로써 중급 레벨의

www.inflearn.com

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.