숫자형

숫자형(Number)이란 숫자 형태로 이루어진 자료형이다!

항목 사용 예
정수 123, -345, 0
실수 123.45, -1234.5, 3.4e10
8진수 0o34, 0o25
16진수 0x2A, 0xFF

숫자형은 어떻게 만들고 사용할까?

정수형

정수형(integer)란 말 그대로 정수를 뜻하는 자료형을 말한다. 다음은 양의 정수와 음의 정수, 숫자0을 변수 a에 대입하는 예이다.

>>> a = 123
>>> a = -178
>>> a = 0

실수형

파이썬에서 실수형(Floating-point)은 소수점이 포함된 숫자를 말한다. 다음 예는 실수를 변수 a에 대입하는 예이다

>>> a = 1.2
>>> a = -3.45

위의 방식은 우리가 일반적으로 볼 수 있는 실수형의 소수점 표현 방식이다.

>>> a = 4.24E10
>>> a = 4.24e-10
  • 위의 방식은 “컴퓨터식 지수 표현 방식”으로 파이썬에서는 4.24e10 또는 4.24E10처럼 표현한다.

8진수와 16진수

  • 8진수(Octal)를 만들기 위해서는 숫자가 0o 또는 0O(숫자 0 + 알파벳 소문자 o또는 대문자 O)로 시작하면 된다.
>>> a = 0o177
  • 16진수를 만들기 위해서는 0x로 시작하면 된다.
>>> a = 0x8ff
>>> b = 0xABC

숫자형을 활용하기 위한 연산자

사칙연산

>>> a = 3
>>> b = 4
>>> a + b
7
>>> a * b
12
>>> a / b
0.75

x의 y제곱을 나타내는 **연산자

이 연산자는 x ** y처럼 사용되었을 때 x의 y제곱(xy)값을 리턴한다.

>>> a = 3
>>> b = 4
>>> a ** b
81

나눗셈 후 나머지를 반환하는 %연산자

%는 나눗셈의 나머지 값을 반환하는 연산자이다.

>>> 7 % 3
1
>>> 3 % 7
3

나눗셈 후 소수점 아랫자리는 버리는 //연산자

// 연산자를 이용할때의 주의할점

  • 다음처럼 음수에 //연산자를 적용하는 경우
>>> -7 / 4
>>> -1.75
>>> -7 // 4
>>> -2

//연산자는 나눗셈의 결과에서 무조건 소수점을 버리는것이 아니라 나눗셈의 결과값보다 작은 정수 중, 가장 큰 정수를 리턴한다.

문자열 자료형

문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 것들이 문자열이다.

"Life is too short, You need Python"
"a"
"123"

문자열은 어떻게 만들고 사용할까?

  1. 큰따옴표로 양쪽 둘러싸기
"Hello World"
  1. 작은따옴표로 양쪽 둘러싸기
'Python is fun'
  1. 큰따옴표 3개를 연속으로 써서 양쪽 둘러싸기
"""Lifr is too short, You need python"""
  1. 작은따옴표 3개를 연속으로 써서 양쪽 둘러싸기
'''Life is too short, You need python'''

문자열 안에 짝은 따옴표나 큰따옴표를 포함시키고 싶을 때

1) 문자열에 작은따옴표(')포함시키기

Python's favorite food is perl

위와 같은 문자열을 food라는 변수에 저장하고 싶다고 가정하자. 문자열 중 Python’s에 작은따옴표(‘)가 포함되어 있다.

  • 이럴때는 다음과 같이 문자열을 큰따옴표(“)로 둘러싸야 한다. 큰따옴표 안에 들어 있는 작은 따옴표는 문자열을 나타내기 위한 기호로 인식되지 않는다.
>>> food = "Python's favorite food is perl"

프롬프트에 food를 입력해서 결과를 확인하면, 변수에 저장된 문자열이 그대로 출력된다

>>> food
"Python's favorite food is perl"
  • 다음과 같이 큰따옴표(“)가 아닌 작은따옴표(‘)로 문자열을 둘러싼 후 다시 실행해보면, ‘Python’이 문자열로 인식되어 오류가 발생한다
>>> food = 'Python's favorite food is perl'
File "<stdin>", line 1
food = 'Python's favorite food is perl'
^
SyntaxError: invalid syntax

2) 문자열에 큰따옴표(")포함시키기

"Python is very easy." he says.

위와 같이 큰따옴표가 포함된 문자열이라면 다음과 같이 작은 따옴표로 둘러싸면 된다

>>> say = '"Python is very easy." he says.'
  • 작은따옴표안에 사용된 큰따옴표는 문자열을 만드는 기호로 인식되지 않는다.

3) \(백슬래시)를 이용해서 작은따옴표(')와 큰따옴표(")를 문자열에 포함시키기

>>> food = 'Python\'s favorite food is perl'
>>> say = "\Python is very easy.\" he says."
  • \(백슬래시) 뒤의 작은따옴표나 큰따옴표는 문자열을 둘러싸는 기호의 의미가 아니라 문자(‘),(“)그 자체를 뜻하게 된다.

여러 줄인 문자열을 변수에 대입하고 싶을 때

Life is too short
You need python

1) 줄을 바꾸기 위한 이스케이프 코드 \n 삽입하기

>>> multiline = "Life is too short\nYou need python"

2) 연속된 작은따옴표 3개(''')또는 큰따옴표 3개(""")이용

>>> multiline='''
... Life is too short
... You need python
... '''
  • print(multiline)을 입력해서 출력되는 값
>>> print(multiline)
Life is too short
You need python

여러줄인 경우 이스케이프 코드를 쓰는 것보다 따옴표를 연속해서 쓰는 것이 훨씬 깔끔하다

문자열 연산하기

1) 문자열 더해서 연결하기

>>> head = "Python"
>>> tail = " is fun!"
>>> head + tail
'Python is fun!'
  • head와 tail 변수가 +에 의해 합쳐지게 된다.

2) 문자열 곱하기

>>> a = "python"
>>> a * 2
'pythonpython'
  • *는 문자열의 반복을 뜻하는 의미로 사용되었다.

문자열 인덱싱과 슬라이싱

인덱싱(Indexing)이란 무엇인가를 “가리킨다”는 의미이고, 슬라이싱(Slicing)은 무엇인가를 “잘라낸다”는 의미이다.

문자열 인덱싱이란?

>>> a = "Life is too short, You need Python"

위의 코드에서 변수 a에 저장한 문자열의 각 문자마다 번호를 매겨보면 다음과 같다

Life is too short, You need Python
0         1         2         3 
0123456789012345678901234567890123
>>> a = "Life is too short, You need Python"
>>> a[3]
'e'
  • a[3]이 뜻하는 것은 a라는 문자열의 네 번째 문자인 e를 말한다.

“파이썬은 0부터 숫자를 센다.”

고로 위의 문자열을 파이썬은 다음과 같이 바라본다

a[0]:'L', a[1]:'i', a[2]:'f', a[3]:'e', a[4]:' ', ...
  • a[번호]는 문자열 내 특정한 값을 뽑아내는 역할을 한다. 이러한 것을 인덱싱이라고 한다!

문자열 인덱싱 활용하기

>>> a = "Life is too short, You need Python"
>>> a[0]
'L'
>>> a[12]
's'
>>> a[-1]
'n'
  • 뒤에서부터 첫 번째 문자를 표시할 때도 0부터 세어 “a[-0]이라고 해야 하지 않을까?”라는 의문이 들 수도 있지만 0 과 -0은 똑같은 것이기 때문에 a[-0]은 a[0]과 똑같은 값을 보여준다
>>> a[-0]
'L'

문자열 슬라이싱이란?

“Life is too short, You need Python”이라는 문자열에서 단순히 한 문자열만을 뽑아내는 것이 아니라 ‘Life’또는 ‘You’같은 단어들만 뽑아내려면 다음과 같이 하면된다.

>>> a = "Life is too short, You need Python"
>>> b = a[0] + a[1] + a[2] + a[3]
>>> b
'Life'
  • 하지만 이것은 슬라이싱 기법으로 다음고 같이 더 간단하게 처리 할 수 있다.
>>> a = "Life is too short, You need Python"
>>> a[0:4]
'Life'

문자열을 슬라이싱하는 방법

>>> a[0:5]
'Life'
  • 위의 예는 a[0] + a[1] + a[2] + a[3] + a[4]와 동일하다.

슬라이싱할 때 항상 시작 번호가 ‘0’일 필요는 없다.

>>> a[0:2]
'Li'
>>> a[5:7]
'is'
>>> a[12:17]
'short'

a[시작 번호:끝 번호]에서 끝 번호 부분을 생략하면 시작번호부터 그 문자열의 끝까지 뽑아낸다.

>>> a[19:]
'You need Python'

a[시작 번호:끝 번호]에서 시작 번호와 끝 번호를 생략하면 문자열의 처음부터 끝까지를 뽑아낸다

>>> a[:]
'Life is too short, You need Python'

슬라이싱에서도 인덱싱과 마찬가지로 마이너스(-) 기호를 사용할 수 있다.

>>> a[19:-7]
'You need'
  • 위 소스 코드에서 a[19:-7]이 뜻하는 것은 a[19]에서부터 a[-8]까지를 말한다.

슬라이싱으로 문자열 나누기

다음은 자주 사용하게 되는 슬라이싱 기법 중 하나이다.

>>> a = "20010331Rainy"
>>> date = a[:8]
>>> weather = a[8:]
>>> date
'20010331'
>>> weather
'Rainy'
  • 위의 예에서는 “20010331Rainy”라는 문자열을 날짜를 나타내는 부분인 ‘20010331’과 날씨를 나타내는 부분인’Rainy’로 나누는 방법을 보여준다!!

문자열 포매팅

“현재 온도는 18도 입니다”

“현재 온도는 20도 입니다”

  • 위의 두 문자열은 모두 같은데 20이라는 숫자와 18이라는 숫자만 다르다. 이렇게 문자열 내의 특정한 값을 바꿔야 할 경우가 있을 때 이것을 가능하게 해주는 것이 바로 문자열 포매팅 기법이다!

문자열 포매팅 따라하기

1) 숫자 바로 대입

>>> "I eat %d apples." % 3
'I eat 3 apples.'
  • 위의 예제에서는 문자열 내에 3이라는 정수를 삽입하는 방법을 보여준다!

2) 문자열 바로 대입

문자열 내에 꼭 숫자만 넣으라는 법은 없다! 숫자 대신 문자열도 가능하다!

>>> 'I eat %s apples." % "five"
'I eat five apples.'
  • 숫자를 넣기 위해서는 %d를 사용한다
  • 문자열을 넣기 위해서는 %s를 사용한다

(문자열을 대입할 때는 큰따옴표나 작은 따옴표를 반드시 사용해야 한다)

3) 숫자 값을 나타내는 변수로 대입

>>> number = 3 
>>> "I eat %d apples." % number
'I eat 3 apples.'
  • 숫자를 바로 대입하나 숫자 값을 나타내는 변수를 대입하나 결과는 같다

문자열 포맷 코드

코드 설명
%s 문자열(String)
%c 문자 1개(character)
%d 정수(Integer)
%f 부동소수(floating-point)
%o 8진수
%x 16진수
%% Literal%(문자%자체)

포맷 코드와 숫자 함께 사용하기

1) 정렬과 공백

>>> "%10s" % "hi"
'			hi'
  • “%10s”의 의미는 전체 길이가 10개인 문자열 공간에서 hi를 오른쪽으로 정렬하고 그 앞의 나머지는 공백으로 남겨두라는 의미이다.

2) 소수점 표현하기

>>> "%0.4f" % 3.42134234
'3.4213'
  • 3.42134234를 소수점 네 번째 자리까지만 나타내고 싶은 경우에는 위와 같이 사용한다!

문자열 관련 함수들

문자열 자료형은 자체적으로 가지고 있는 함수들이 있다. 이 함수들은 다른말로 문자열 내장함수라고 한다.

문자 개수 세기(count)

>>> a = "hobby"
>>> a.count('b')
2
  • 문자열 중 b의 개수를 반환한다!

위치 알려주기1(find)

>>> a = "Python is best choice"
>>> a.find('b')
10
>>> a.find('k')
-1
  • 문자열 중 문자 b가 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 -1을 반환한다.

(*파이썬은 숫자를 0부터 세기 때문에 b의 위치는 11이 아닌 10이 된다)

위치 알려주기2(index)

>>> a = "Life is too short"
>>> a.index('t')
8
>>> a.index('k')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
  • 문자열 중 문자 t가 맨 처음으로 나온 위치를 반환한다. 만약 찾는 문자나 문자열이 존재하지 않는다면 오류를 발생시킨다!

문자열 삽입(join)

>>> a = ","
>>> a.join('abcd')
'a,b,c,d'
  • abcd라는 문자열의 각각의 문자 사이에 변수 a의 값인’,’를 삽입한다.

소문자를 대문자로 바꾸기(upper)

>>> a = "hi"
>>> a.upper()
'HI'
  • upper()함수는 소문자를 대문자로 바꾸어 준다!

대문자를 소문자로 바꾸기(lower)

>>> a = "HI"
>>> a.lower()
'hi'
  • lower() 함수는 대문자를 소문자로 바꾸어 준다!

왼쪽 공백 지우기(lstrip)

>>> a = " hi "
>>> a.lstrip()
'hi '

오른쪽 공백 지우기(rstrip)

>>> a = " hi "
>>> a.rstrip()
' hi'

양쪽 공백 지우기(strip)

>>> a = " hi "
>>> a.strip()
'hi'

문자열 바꾸기(replace)

>>> a = "Life is too short"
>>> a.replace("Life", "Your leg")
'Your leg is too short'
  • 문자열 내의 특정한 값을 다른 값으로 치환해준다!

문자열 나누기(split)

>>> a = "Life is too short"
>>> a.split()
['Life', 'is', 'too', 'short']
>>> a = "a:b:c:d"
>>> a.split(':')
['a', 'b', 'c', 'd']

리스트 자료형

리스트는 어떻게 만들고 사용할까?

리스트를 만들 때에는 대괄호([])로 감싸 주고 각 요소값들은 쉼표(,)로 구분해 준다

>>> odd = [1, 3, 5, 7, 9]

여러가지 리스트의 형태

>>> a = [ ]
>>> b = [1, 2, 3]
>>> c = ['Life', 'is', 'too', 'short']
>>> d = [1, 2, 'Life', 'is']
>>> e = [1, 2, ['Life', 'is']]
  • 리스트는 a처럼 아무것도 포함하지 않는, 비어있는 리스트([])일 수도 있고 b처럼 숫자를 요소값으로 가질 수도 있고 c처럼 문자열을 요소값으로 가질 수도 있다.

(*비어 있는 리스트는 a = list()로 생성할 수도 있다)

리스트의 인덱싱과 슬라이싱

리스트도 문자열처럼 인덱싱과 슬라이싱이 가능하다.

리스트의 인덱싱

리스트 역시 문자열처럼 인덱싱을 적용 할 수 있다. 먼저 a 변수에 [1,2,3]이라는 값을 설정한다.

>>> a = [1, 2, 3]
>>> a
[1, 2, 3]

a[0]은 리스트 a의 첫번째 요소값을 말한다

>>> a[0]
1

아래의 예는 리스트의 첫번째 요소인 a[0]과 세번째 요소인 a[2]의 값을 더한것이다

>>> a[0] + a[2]
4
  • 이것은 1 + 3으로 해석되고 4라는 값을 출력한다

리스트의 슬라이싱

문자열과 마찬가지로 리스트에서도 슬라이싱 기법을 적용할 수 있다!

  • 슬라이싱은 “나눈다”라는 뜻이다
>>> a = [1, 2, 3, 4, 5]
>>> a[0:2]
[1, 2]

리스트 연산자

리스트 역시 + 기호를 이용해서 더할 수 있고, *기호를 이용해서 반복할 수 있다.

1) 리스트 더하기(+)

>>> a = [1, 2, 3]
>>> b = [4, 5, 6]
>>> a + b
[1, 2, 3, 4, 5, 6]

2) 리스트 반복하기(*)

>>> a = [1, 2, 3]
>>> a * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]

리스트의 수정, 변경과 삭제

1. 리스트에서 하나의 값 수정하기

>>> a = [1, 2, 3]
>>> a[2] = 4
>>> a
[1, 2, 4]

2. 리스트에서 연속된 범위의 값 수정하기

>>> a[1:2]
[2]
>>> a[1:2] = ['a', 'b', 'c']
>>> a
[1, 'a', 'b', 'c', 4]
  • a[1:2]를 [‘a’, ‘b’, ‘c’]로 바꾸었으므로 a리스트에서 2라는 값 대신에 [‘a’, ‘b’, ‘c’]라는 값이 대입된다.

주의할점

만약 전제를 a[1:2]가 아니라 a[1] = [‘a’, ‘b’, ‘c’]로 한다면 a의 출력값은 [1, [‘a’, ‘b’, ‘c’], 4]가 된다!!

3. [ ]사용해 리스트 요소 삭제하기

>>> a[1:3] = []
>>> a
[1, 'c', 4]

4. del 함수 사용해 리스트 요소 삭제하기

>>> a 
[1, 'c', 4]
>>> del a[1]
>>> a
[1, 4]

리스트 관련 함수들

리스트에 요소 추가(append)

>>> a = [1, 2, 3]
>>> a.append(4)
>>> a
[1, 2, 3, 4]

리스트 정렬(sort)

>>> a = [1, 4, 3, 2]
>>> a.sort()
>>> a
[1, 2, 3, 4]

리스트 뒤집기(reverse)

>>> a = ['a', 'c', 'b']
>>> a.reverse()
>>> a
['b', 'c', 'a']

위치 반환(index)

index(x)함수는 리스트에 x라는 값이 있으면 x의 위치값을 리턴한다

>>> a = [1,2,3]
>>> a.index(3)
2
>>> a.index(1)
0

리스트에 요소 삽입(insert)

insert(a, b)는 리스트의 a번째 위치에 b를 삽입하는 함수이다.

>>> a = [1, 2, 3]
>>> a.insert(0, 4)
[4, 1, 2, 3]

리스트 요소 제거(remove)

remove(x)는 리스트에서 첫번째로 나오는 x를 삭제하는 함수이다.

>>> a = [1, 2, 3, 1, 2, 3]
>>> a.remove(3)
[1, 2, 1, 2, 3]

리스트 요소 끄집어내기(pop)

pop()은 리스트의 맨 마지막 요소를 돌려주고 그 요소는 삭제하는 함수이다!

>>> a = [1,2,3]
>>> a.pop()
3
>>> a
[1, 2]

리스트에 포함된 요소 x의 개수 세기(count)

count(x)는 리스트 내에 x가 몇개 있는지 조사하여 그 개수를 돌려준다

>>> a = [1,2,3,1]
>>> a.count(1)
2
  • 1이라는 값이 리스트 a에 2개 들어있으므로 2를 반환한다!

리스트 확장(extend)

extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더하게 된다.

>>> a = [1,2,3]
>>> a.extend([4,5])
>>> a
[1, 2, 3, 4, 5]
>>> b = [6, 7]
>>> a.extend(b)
>>> a
[1, 2, 3, 4, 5, 6, 7]

튜플 자료형

튜플은 어떻게 만들까?

  • 리스트는 [과 ]으로 둘러싸지만 튜플은 (과 )으로 둘러싼다
  • 리스트는 그 값의 생성, 삭제, 수정이 가능하지만 튜플은 그 값을 바꿀 수 없다
>>> t1 = ()
>>> t2 = (1,)
>>> t3 = (1, 2, 3)
>>> t4 = 1, 2, 3
>>> t5 = ('a', 'b', ('ab', 'cd'))

튜플의 요소값을 지우거나 변경하려고 하면 어떻게 될까?

튜플의 값을 리스트값을 지우거나 변경하는 것처럼 하면 오류가 발생한다!!

튜플의 인덱싱과 슬라이싱, 더하기(+)와 곱하기(*)

1. 인덱싱하기

>>> t1 = (1, 2, 'a', 'b')
>>> t1[0]
1
>>> t1[3]
'b'
  • 문자열, 리스트와 마찬가지로 t1[0], t1[3]처럼 인덱싱이 가능하다

2. 슬라이싱하기

>>> t1 = (1, 2, 'a', 'b')
>>> t1[1:]
(2, 'a', 'b')

3. 튜플 더하기

>>> t2 = (3, 4)
>>> t1 + t2
(1, 2, 'a', 'b', 3, 4)

4. 튜플 곱하기

>>> t2 * 3
(3, 4, 3, 4, 3, 4)

딕셔너리 자료형

파이썬에서는 자료형을 딕셔너리 라고 하며, Key와 Value값으로 한쌍을 이루는 자료형이다!

  • 예컨대, Key가 “baseball”이라면 Value는 “야구”가 될 것이다!

딕셔너리는 어떻게 만들까?

Key에는 변하지 않는 값을 사용하고, Value에는 변하는 값과 변하지 않는 값 모두 사용 가능하다!

딕셔너리 dic의 정보

key value
name pey
phone 0118888888
birth 1111
  • 다음의 예는 Key로 정수값 1, Value로 ‘hi’라는 문자열을 사용한 예이다
>>> a = {1: 'hi'}
  • 다음의 예처럼 Value에 리스트를 넣을 수도 있다.
>>> a = {'a': [1,2,3]}

딕셔너리 쌍 추가, 삭제하기

추가되는 순서는 원칙이 없다!

중요한 것은 “무엇이 추가되었는가”이다!

1. 딕셔너리 쌍 추가하기

>>> a = {1: 'a'}
>>> a[2] = 'b'
>>> a
{2: 'b', 1: 'a'}
  • {1: ‘a’}라는 딕셔너리에 a[2] = ‘b’와 같이 입력하면 딕셔너리 a에 Key와 Value가 각각 2와 ‘b’인 2: ‘b’라는 딕셔너리 쌍이 추가된다.

2. 딕셔너리 요소 삭제하기

>>> del a[1]
>>> a
{'name': 'pey', 3: [1, 2, 3], 2: 'b'}
  • del 함수를 사용해서 del a[key]처럼 입력하면 지정한 key에 해당하는 {key: value}쌍이 삭제된다!

딕셔너리를 사용하는 방법

예를 들어, 4명의 사람이 있다고 가정하고 각자의 특기를 표현 할 수 있는 좋은 방법에 대해서 생각해봤을때 리스트나 문자열로는 표현하기가 상당히 까다롭지만 딕셔너리를 사용하면 표현하기가 쉽다!!

딕셔너리에서 Key 사용해 Value 얻기

>>> grade = {'pey': 10, 'julliet': 99}
>>> grade['pey']
10
>>> grade['julliet']
99
  • 위의 예에서, ‘pey’라는 Key의 Value를 얻기 위해 grade[‘pey’]를 사용한 것처럼 어떤 Key의 어떤 Value를 얻기 위해서는 “딕셔너리 변수[Key]”를 사용한다!

딕셔너리를 만들 때 주의사항

딕셔너리에서 Key는 고유한 값이므로 중복되는 Key값을 설정해놓으면 하나를 제외한 나머지 것들이 모두 무시된다 ( 꼭 어떤것이 무시될지는 알수없다! )

  • 중복되는 Key를 사용하지 말아야한다.
>>> a = {1: 'a', 1: 'b'}
>>> a
{1: 'b'}
  • Key를 통해서 Value를 얻는 딕셔너리의 특징상, 동일한 Key가 존재한다면 어떤 Key에 해당하는 Value를 불러야 할 지 알 수 없기 때문이다!

딕셔너리 관련 함수들

Key 리스트 만들기(keys)

>>> a = {'name': 'pey', 'phone': '0118384384', 'birth': '1111'}
>>> a.keys()
dict_keys(['name', 'phone', 'birth'])
  • a.keys()는 딕셔너리 a의 Key만을 모아서 dict_keys라는 객체를 리턴한다!

**dict_keys 객체는 리스트를 사용하는 것과는 차이가 없지만, 리스트 고유의 함수인 append, insert, pop, remove, sort등의 함수를 수행할 수는 없다!

>>> for k in a.keys():
... 	print(k)
...
phone
birth
name

dict_keys 객체를 리스트로 변환하려면 다음과 같이 하면 된다!

>>> list(a.keys())
['phone', 'birth', 'name']

Value 리스트 만들기(value)

>>> a.values()
dict_values(['pey', '0102392392', '1111'])
  • key를 얻는 것과 마찬가지 방법으로 Value만 얻고 싶다면 a.value()처럼 value함수를 사용하면 된다!

Key, Value 쌍 얻기(items)

>>> a.items()
dict_items([('name', 'pey'), ('phone', '01024242424'), ('birth', '1111')])
  • item 함수는 key와 value의 쌍을 튜플로 묶은 값을 dict_items 객체로 돌려준다!

Key: Value 쌍 모두 지우기(clear)

>>> a.clear()
>>> a
{}
  • clear() 함수는 딕셔너리 안의 모든 요소를 삭제한다.

Key로 Value얻기(get)

>>> a = {'name': 'pey', 'phone':'0102222222', 'birth': '1111'}
>>> a.get('name')
'pey'
>>> a.get('phone')
'01022222222'
  • get(x) 함수는 x라는 key에 대응되는 value를 돌려준다

해당 Key가 딕셔너리 안에 있는지 조사하기(in)

>>> a = {'name':'pey', 'phone':'0102222222', 'birth':'1111'}
>>> 'name' in a
True
>>> 'email' in a
False
  • ‘name’이라는 문자열은 a 딕셔너리의 key 중 하나이다. 따라서 ‘name’ in a를 호출하면 참(True)을 리턴한다.

집합 자료형

집합 자료형은 어떻게 만들까?

집합(set)은 파이썬 2.3부터 지원되기 시작한 자료형으로, 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형이다.

  • 집합 자료형은 다음과 같이 set 키워드를 이용해 만들 수 있다.
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}

집합 자료형의 특징

  • 중복을 허용하지 않는다.
  • 순서가 없다

리스트나 튜플은 순서가 있기 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 set 자료형은 순서가 없기 때문에 인덱싱으로 값을 얻을 수 없다.

  • 만약 set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한 후 사용 가능하다.
>>> s1 = set([1,2,3])
>>> l1 = list(s1)
>>> l1
[1, 2, 3]
>>> l1[0]
1
>>> t1 = tuple(s1)
>>> t1
(1, 2, 3)
>>> t1[0]
1

집합 자료형 활용하는 방법

교집합, 합집합, 차집합 구하기

set 자료형이 정말 유용하게 사용되는 경우는 다음과 같이 교집합, 합집합, 차집합을 구할 때이다!

>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])

1. 교집합

s1과 s2의 교집합

>>> s1 & s2
{4, 5, 6}

2. 합집합

>>> s1 | s2
{1, 2, 3, 4, 5, 6, 7, 8, 9}
  • 4,5,6처럼 중복해서 포함된 값은 한개씩만 표현된다

3. 차집합

>>> s1 - s2
{1, 2, 3}
>>> s2 - s1
{8, 9, 7}

집합 자료형 관련 함수들

값 1개 추가하기(add)

>>> s1 = set([1, 2, 3])
>>> s1.add(4)
>>> s1
{1, 2, 3, 4}
  • 이미 만들어진 set 자료형에 값을 추가할 수 있다. 1개의 값만 추가(add)할 경우에는 위와 같이 한다.

값 여러 개 추가하기(update)

>>> s1 = set([1, 2, 3])
>>> s1.update([4, 5, 6])
>>> s1
{1, 2 ,3, 4, 5, 6}

특정 값 제거하기(remove)

>>> s1 = set([1, 2, 3])
>>> s1.remove(2)
>>> s1
{1, 3}

자료형의 참과 거짓

자료형에도 참과 거짓이 있다. 이는 매우 중요한 특징이며 실제로도 자주 쓰인다.

>>> a = [1, 2, 3, 4]
>>> while a:
... 	a.pop()
... 
4
3
2
1
  • 먼저 a = [1,2,3,4]라는 리스트를 하나 만들었다.
while 조건문:
	수행할 문장
  • 조건문이 참인 동안 조건문 안에 있는 문장을 반복해서 수행한다!

  • 위의 예를 보면 a가 참인 경우에 a.pop()을 계속 실행하라는 의미이다. a.pop()이라는 함수는 리스트 a의 마지막 요소를 끄집어내는 함수이므로 a가 참인 동안(리스트 내에 요소가 존재하는 한)마지막 요소를 계속해서 끄집어낼 것이다.

>>> if [ ]:
...	 	print("True")
... else:
... 	print("False")
...
False
  • 위의 에제를 보면 쉽게 이해 할 수 있다.
>>> if [1, 2, 3]:
... 	print("True")
... else:
... 	print("False")
...
True
  • 위의 코드를 해석하면 이와 같다고 할 수 있다.

    • 만약 [1,2,3]이 참이면, “True”라는 문자열을 출력하고, 그렇지 않다면 “False”라는 문자열을 출력해라!”

위 코드의 [1,2,3]은 요소값이 있는 리스트이기 때문에 참이다!

자료형의 값을 저장하는 공간, 변수

>>> a = 1
>>> b = "python"
>>> c = [1,2,3]

변수를 만들 때는 위의 예처럼 =(assignment)기호를 사용한다.

변수명 = 변수에 저장할 값

변수란?

>>> a = 3 
  • 만약 위의 코드처럼 a = 3이라고 한다면 3이라는 값을 가지는 정수 자료형(객체)이 자동으로 메모리에 생성된다. a는 변수의 이름이며, 3이라는 정수형 객체가 저장된 메모리 위치를 가리키게 된다!

a–>3

>>> a = 3 
>>> b = 3
>>> a is b
True
  • a가 3을 가리키고 b도 3을 가리킨다. 즉 a = 3 을 입력하는 순간, 3이라는 정수형 객체가 생성되고 변수 a는 3이라는 객체의 메모리 주소를 가리킨다!

변수를 만드는 여러가지 방법

>>> a, b = ('python', 'life')
  • 위의 예문처럼 튜플로 a,b에 값을 대입 할 수 있다.
>>> (a, b) = 'python', 'life'
  • 튜플은 괄호를 생략해도 된다!

메모리에 생성된 변수 없애기!!

a=3을 입력하면 3이라는 정수형 객체가 메모리에 생성된다고 했다. 그렇다면 이 값을 메모리에서 없앨 수 있을까? 3이라는 객체를 가리키는 변수들의 개수를 레퍼런스 카운트라고 하였는데, 이 레퍼런스 카운트가 0이 되는 순간 3이라는 객체는 자동으로 사라진다. 즉, 3이라는 객체를 가리키고 있는 것이 하나도 없을 때 3이라는 객체는 메모리에서 사라지게 된다! 이것을 어려운 말로 가비지 콜렉션(쓰레기 수집)이라고도 한다!

  • 다음은 특정한 객체를 가리키는 변수를 없애는 것이다
>>> a = 3
>>> b = 3 
>>> del(a)
>>> del(b)
  • 변수 a와 b가 3이라는 객체를 가리켰다가 del이라는 파이썬 내장 함수에 의해서 사라진다. 따라서 레퍼런스 카운트가 0이 되어 정수형 객체 3도 메모리에서 사라지게 된다

(* 사용한 변수를 del 명령어를 이용하여 일일이 삭제할 필요는 없다. 파이썬이 이 모든 것을 자동으로 해준다)

** 리스트를 변수에 넣고 복사하고자 할 때

>>> a = [1,2,3]
>>> b = a
>>> a[1] = 4
>>> a
[1, 4, 3]
>>> b
[1, 4, 3]
  • b라는 변수에 a가 가리키는 리스트를 대입하였다. 그런 다음 a 리스트의 a[1]을 4라는 값으로 바꾸면 a 리스트만 바뀌는 것이 아니라 b 리스트도 똑같이 바뀐다.

    • 그렇다면 b변수를 생성할 때 a와 같은 값을 가지도록 복사해 넣으면서 a가 가리키는 리스트와는 다른 리스트를 가리키게 하는 방법은 없을까?

      • 두가지 방법이 있다.

        #### 1. [:]의 이용

          >>> from copy import copy
          >>> b = copy(a)
        

        #### 2. copy 모듈 이용

          >>> b is a
          False