[머신러닝 인강] 1. Python Programming 기초(2)

Uno·2021년 2월 21일
0



dictionary

  • 키와 값을 갖는 데이터 구조
  • 키는 내부적으로 hash값으로 저장
  • 순서를 따지지 않음
a = {'Korea': 'Seoul', 
     'Canada': 'Ottawa', 
     'USA': 'Washington D.C'}
b = {0:1, 1:6, 7:9, 8:10}
  • 항목 추가 및 변경
    • 기존에 키가 존재하면, 새로운 값으로 업데이트
    • 존재하지 않으면, 새로운 키, 값 생성
a = {'Korea': 'Seoul', 
     'Canada': 'Ottawa', 
     'USA': 'Washington D.C'}

a['Japan'] = 'Tokyo'
a['Japan'] = 'Kyoto'
a['Japan2'] = 'Kyoto'
a['China'] = 'Beijing'

print(a)
"""
{'Korea': 'Seoul', 'Canada': 'Ottawa',
'USA': 'Washington D.C', 'Japan': 'Kyoto',
'Japan2': 'Kyoto', 'China': 'Beijing'}
"""
  • update
    • 두 딕셔너리를 병합함
    • 겹치는 키가 있다면 parameter로 전달되는 키 값이 overwrite된다
a = {'a': 1, 'b': 2, 'c' : 3}
b = {'a': 2, 'd': 4, 'e': 5}

a.update(b)

print(a) # {'a': 2, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
  • key삭제
    • del 키워드 사용
    • pop 함수 이용
a = {'a': 1, 'b': 2, 'c' : 3}
print(a) # {'a': 1, 'b': 2, 'c': 3}

del a['b'] # a.pop('b')
print(a) # {'a': 1, 'c': 3}
  • clear
    • 딕셔너리의 모든 값을 초기화
a = {'a': 1, 'c' : 3}
print(a) # {'a': 1, 'c': 3}
a.clear()
print(a) # {}
  • in
    • key값 존재 확인
    • O(1) 연산 → 딕셔너리의 크기와 관계없이 항상 연산의 속도가 일정하다는 의미
a = {'a': 1, 'b': 2, 'c' : 3}
b = [1, 2, 3, 4, 5, 6, 7, 9, 10, 100]

print(100 in b) # Ture
print(2 in a) # False
  • value access
    • dict[key]로 접근, 키가 없는 경우 에러 발생
    • .get() 함수로 접근, 키가 없는 경우 None 반환
a = {'a': 1, 'b': 2, 'c' : 3}
print(a.get('d')) # print(a['d']) -> None

모든 keys, values 접근

  • keys() → 키만 반환
  • values() → 값만 반환
  • items() → 키, 값의 튜플을 반환
a = {'a': 1, 'b': 2, 'c' : 3}
print(a) # {'a': 1, 'b': 2, 'c': 3}
print(list(a.keys())) # ['a', 'b', 'c']
print(list(a.values())) # [1, 2, 3]

list(a.items()) # [('a', 1), ('b', 2), ('c', 3)]

set

  • dictionary에서 key만 활용하는 데이터 구조로 이해
  • 수학에서의 집합과 동일한 개념
a = {1, 1, 2, 3, 3, 4, 1, 5}
print(a) # {1, 2, 3, 4, 5}
  • set()으로 집합으로 변환
a = [1, 1, 2, 3, 3, 4, 1, 5]
print(a) # [1, 1, 2, 3, 3, 4, 1, 5]

b = set(a)
print(b) # {1, 2, 3, 4, 5}
  • set operations
    • 수학 연산과 동일
    • 교집합, 합집합, 차집합 등 지원
a = {1, 2, 3}
b = {2, 3, 4}

print(a.union(b)) # 합집합 {1, 2, 3, 4}
print(a.intersection(b)) # 교집합 {2, 3}
print(a.difference(b)) # 차집합 {1}
print(a.issubset(b)) #부분 집합 False

조건문 & 반복문

조건문

  • 특정 조건을 만족하는 경우에만 수행할 작업이 있는 경우 사용
  • 모든 조건은 boolean
  • if, elif, else 키워드 사용

Logical AND, OR, NOT

  • 조건문에 사용되는 조건의 경우, boolean이기 때문에, 논리식 AND, OR, NOT 이 사용가능
  • AND : and
  • OR : or
  • NOT : not

논리표

  • AND
    • T AND T : T
    • T AND F : F
    • F AND T : F
    • F AND F : F
  • OR
    • T OR T : T
    • T OR F : T
    • F OR T : T
    • F OR F : F
  • NOT
    • NOT T : F
    • NOT F : T
  • 우선순위
    • NOT > AND > OR
a, b, c = 10, 8, 11
if (a == 10 or b == 9) and c == 12: # (T or F) and F -> F
    print('that is true')
if not a == 10: # not T -> F
    print('a is ten')

if의 조건이 bool이 아닌 경우

  • 일반적으로는 조건문에는 bool이 주로 위치
  • 하지만, 정수, 실수, 문자열 리스트 등 기본 타입도 조건에 사용 가능
  • False로 간주되는 값( 각 타입의 기본값)
    • None
    • 0
    • 0.0
    • ""
    • []
    • ()
    • {}
    • set()
  • 그밖에는 모두 True로 간주

if, else

  • if가 아닌 경우, 나머지 조건을 표현하고 싶다면 바로 아래 else 블락 사용
  • 이 경우, if조건이 True인 경우, if 블락의 코드가 수행, 거짓인 경우 else 블락의 코드가 수행
  • 주의 할 점 : if와 else사이에 다른 코드 삽입 불가
# 짝수인 경우에는 2로 나눈 값을 출력하고
# 홀수인 경우에는 1을 더한 값을 출력해라

a = 12
if a % 2 == 0: # 짝수인지 판별
    print(a / 2)
else:
    print(a + 1)

if, elif, else

  • 조건이 여러개인 경우, 다음 조건을 elif 블록에 명시 가능
  • 이 경우, 각 조건을 확인 후, True인 조건의 코드 블락을 실행 한 후, 전체 if, elif, else 구문을 종료
  • 조건문을 사용할 때는, if 이후, 0개 이상의 elif를 사용 가능하며 최대 1개의 else를 사용 가능함

중첩 조건문

  • 조건문의 경우 중첩하여 작성 가능
  • 중첩의 의미는 depth(깁이)로 생각할 수 있으며, depth의 제한은 없음
a, b, c = 10, 9, 8

if a == 10:
    if c == 8:
        if b == 8:
            print('a is ten and b is 8')
        else:
            print('a is ten and b is not 8')

머신러닝과 데이터 분석 A-Z 올인원 패키지 Online. 👉 https://bit.ly/3cB3C8y

0개의 댓글