본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 점프 투 파이썬 2장 – 파이썬 프로그래밍의 기초, 자료형 ② (책 없이 시작하기)

2. 파이썬 프로그래밍의 기초, 자료형

자료형: 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이 자료 형태로 사용하는 모든 것을 뜻함. 프로그램의 기본이자 핵심 단위.

 

2-5. 딕셔너리

대응 관계를 나타낼 수 있는 딕셔너리(dictionary) 자료형. 연관 배열(associative array)’또는 ‘해시(hash)’라고도 한다.

예를 들어 4명의 사람이 있다고 가정하고 각자의 특기를 표현할 수 있는 좋은 방법

구분 설명 예시 결과
기본 형태 {키: 값} 형태로 구성
※ 키(key)로 값(value)에 접근
a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'} name=pey
phone=0119993323
birth=1118
값 접근 키를 이용해 값 참조 a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a['name']
'pey'
새 항목 추가 새 키에 값 할당. 새 항목 추가됨 ① a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a['address'] = 'Seoul'

 a[3] = [1, 2, 3]
    a
 {'name':'pey', 'phone':'0119993323', 'birth':'1118', 'address'] = 'Seoul'}
 {'name':'pey', 'phone':'0119993323', 'birth':'1118', 'address'] = 'Seoul', 3:[1,2,3]}
항목 삭제 del[key]이용, {Key: Value} 쌍 삭제 a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
del a['phone']
a
a = {'name':'pey', 'birth':'1118'}
키 중복 불가 중복된 키 입력 시 마지막 값으로 덮어씀 {'a':1, 'a':2} {'a':2}
값 중복 가능 동일한 값은 여러 키에 사용 가능 {'a':1, 'b':1} 가능
키 조건 키로 쓸 수 있는 자료형: 문자열, 숫자, 튜플 (리스트×)  {(1,2):'OK'}
② grade = {'pey': 10, 'julliet': 99}
    grade['pey']
    10
    grade['julliet']
 {'(1, 2)': 'OK'}
 99
딕셔너리 함수
a.keys() 키 리스트 반환(반복문 사용 가능) dict_keys(['name','birth'])
dict['name']
 
a.values() 값 리스트 반환 dict_values(['pey','1118'])  
a.items() (키, 값) 쌍 튜플 리스트 반환 dict_items([('name','pey'),('birth','1118')])  
a.clear() 모든 항목 삭제 a.clear()
a
{}
a.get('키') 키의 값 반환 (없을 시 None)
※ None = 거짓
a.get('birth') '1118'
a.get('age', 0) 키 없을 시 디폴트값 반환 0  
'key' in a 키 존재 여부 확인 'name' in a True
a.pop(x) Key가 x인 항목을 삭제한 후 그 값을 반환 a.pop('phone') phone '010-9999-1234'
a
{'name': 'pey', 'birth': '1118'}
반복문 활용 딕셔너리의 키나 값 순회 for k in a.keys():
         print(k)
※ 들여쓰기 필수
name, birth, …

2-6. 집합

수학의 집합 개념과 동일한 자료형이다. 중복을 허용하지 않고 순서가 없는 데이터들의 모임으로, 교집합, 합집합, 차집합 등의 집합 연산을 쉽게 처리할 수 있다.

비어 있는 집합 자료형은 s = set()로 만들 수 있다. s = {}로 만들면 딕셔너리가 되므로 주의해야 한다.

구분 설명 예시 결과
기본 형태 중복을 허용하지 않고, 순서가 없는 자료형 s1 = {1, 2, 3} {1, 2, 3}
set() 함수 사용 리스트나 문자열 등을 집합으로 변환

- 집합은 중복을 허용하지 않음(데이터의 중복을 제거)
- 순서가 없음.
(Unordered).
① s2 = set([1, 2, 3])
    s2
s2 = set("hello")
    s2
 {1, 2, 3} 

{'e', 'h', 'l', 'o'}
중복 제거 활용 리스트의 중복 제거 용도로 사용 list(set([1,1,2,2,3])) [1, 2, 3]
순서 없음 인덱싱 불가, 대신 리스트/튜플 변환 후 사용 list(s1)[0] 변환 후 인덱싱 가능
교집합
(intersection)
공통 원소 추출 ① s1 = set([1, 2, 3, 4, 5, 6])
     s2 = set([4, 5, 6, 7, 8, 9])
     s1 & s2
② s1 = set([1, 2, 3, 4, 5, 6])
     s2 = set([4, 5, 6, 7, 8, 9])

     s1.intersection(s2)
① {4, 5, 6}

② {4, 5, 6}
합집합 (union) 모든 원소 합침 (중복 제외) ① s1 | s2
s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8, 9}
{1, 2, 3, 4, 5, 6, 7, 8, 9}
차집합
(difference)
한쪽에만 있는 원소 추출. 즉 공통된 원소는 제외 ① s1 - s2
 s2.difference(s1)
① {1, 2, 3}

② {8, 7, 9}
대칭차집합
(symmetric_difference)
한쪽에만 존재하는 원소 ① s1 ^ s2
 s1.symmetric_difference(s2)
① {1, 2, 3, 7, 8, 9}
② {1, 2, 3, 7, 8, 9}
요소 추가 (add) 원소 1개 추가 s1 = set([1, 2, 3])
s1.add(4)
s1
{1, 2, 3, 4}
여러 요소 추가
(update)
여러 원소 한 번에 추가 s1 = set([1, 2, 3])
s1.update([5,6])
s1
{1,2,3,5,6}
요소 제거
(remove)
특정 원소 제거 (없으면 오류) s1 = set([1, 2, 3])
s1.remove(2)
s1
{1,3}
요소 제거
(discard)
특정 원소 제거 (없어도 오류 없음) s1 = set([1, 2, 3])
s1.discard(10)
s1
{1,3}
그대로 유지 없는 값이어도 오류가 발생하지 않음
모든 원소 제거
(clear)
집합 비움 s1 = set([1, 2, 3])
s1.clear()
s1
set()
길이 확인 원소 개수 반환 s1 = set([1, 2, 3])
len(s1)
3

2-7. 불(bool)

불 자료형은 참(True)거짓(False) 두 값만 가지며, 비교·논리 연산이나 조건문에서 핵심 역할을 한다.(첫 문자는 항상 대문자로 작성)

구분 설명 예시 결과
정의 참(True) 또는 거짓(False)을 나타내는 자료형 a = True
b = False
불(bool) 타입
타입 확인 type() 함수로 확인 가능
x의 자료형을 확인
type(True) <class 'bool'>
비교 연산 결과 조건문의 리턴값으로도 사용됨 ① 1 < 2
② 3 == 4
③ 1 != 1
① True
② False
② False
논리 연산자 and: 양쪽 조건이 모두 참일 때만 True를 반환
or: 양쪽 조건 중 하나라도 참이면 True를 반환
not: 조건의 참/거짓을 뒤바꾼다.
 True and False
 not True
 False
 False
조건문에서 사용 불값이 조건문의 판단 기준이 됨 if True: print("참") "참" 출력
자료형의 참/거짓 판단 파이썬의 모든 자료형은 참(True) 또는 거짓(False)으로 평가 가능
ㄴ 참으로 취급 값이 있는 모든 객체 "python", [1], 10, (1,2) True
ㄴ 거짓으로 취급 값이 없는 객체 "", [], {}, (), 0, None False
bool() 함수 객체를 불값으로 변환  bool("hello")
 bool([])
 True
 False

 

2-8. 변수: 자료형의 값을 저장하는 방법

※ 변수명 규칙

  1. 영문자, 숫자, 언더스코어(_)만 사용할 수 있다. 단어 사이에 언더스코어)를 권장. 의미가 명확한 이름을 사용.
  2. 숫자로 시작할 수 없다. 너무 짧거나 긴 이름은 피한다.
  3. 예약어는 사용할 수 없다.
  4. 대소문자를 구분한다.
예약어 False, None, True, and, as, assert, break, class, continue, def, 
del, elif, else, except, finally, for, from, global, if, import, 
in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield
구분 설명 예시 결과
변수의 개념 어떤 값을 저장하기 위한 이름(공간) a = 1
b = "python"
변수 a에 1 저장
변수 b에 문자열 저장
할당 연산자 = 는 “같다”가 아니라
오른쪽 값을 왼쪽 변수에 저장한다는 의미
x = 3 x에 3이 저장됨
여러 변수 동시 할당 여러 값을 한 줄에 동시에 저장 가능 a, b = 1, 2 a=1, b=2
같은 값
여러 변수에 할당
하나의 값을 여러 변수에 동시에 저장 a = b = c = 0 모두 0 저장
변수에
다른 변수 대입
기존 변수의 값을 새 변수에 복사 a = 3
b = a
b는 3
변수의
실제 저장 방식
변수는 객체(값) 를 가리키는 이름표(label) 역할 a = [1,2,3]
b = a
a, b 모두 같은 리스트 객체 참조
객체 주소 확인 id() 함수로 변수에 저장된 객체의 주소 확인
컴퓨터가 프로그램에서 사용하는 데이터를 기억하는 공간 주소
a = [1,2,3]
id(a)
4303029896
객체 고유 ID 값 반환
동일 객체 비교 is 연산자로 같은 객체인지 판단 a is b
# a와 b가 가리키는 객체가 같을까?
True (같은 객체일 때)
독립된 객체로 복사 copy() 또는 슬라이싱 사용 b = a[:]
from copy import copy
b = copy.copy(a)
새로운 객체 생성
변수 삭제 del 명령으로 메모리에서 제거 del a a 변수 삭제됨
주의점 리스트나 딕셔너리 등 mutable(변경 가능) 객체는
같은 주소를 공유할 수 있으므로 주의
a = [1,2]
b = a
a.append(3)
b도 [1,2,3]로 변경됨