본문 바로가기

파이썬기초/파이썬기본개념2

[점프투파이썬] 02장 파이썬 프로그래밍의 기초, 자료형 [#파이썬공부기록-요약정리]

02장 파이썬 프로그래밍의 기초, 자료형

 

__02-1 숫자형

____숫자형은 어떻게 만들고 사용할까? :: 정수형(Integer), 실수형(Floating-point), 8진수와 16진수

____숫자형을 활용하기 위한 연산자 :: 사칙연산, 제곱(**), 나눗셈 후 나머지(%), 나눗셈 몫(//)

 

 

 

__02-2 문자열 자료형

____문자열은 어떻게 만들고 사용할까?  :: (”~”), (’~’), (”””~”””), (’’’~’’’)

 

____문자열 안에 작은따옴표나 큰따옴표를 포함시키고 싶을 때 :: (포함시키거나, \백슬래쉬 사용)

 

____여러 줄인 문자열을 변수에 대입하고 싶을 때 :: (\n삽입), (’’’ or “”” 사용)

 

____문자열 연산하기 :: 문자열 더해서 연결하기(’~’+’~’) / 문자열 곱하기(’~’*2) / 문자열 길이구하기(len(~))

 

____문자열 인덱싱과 슬라이싱

:: 문자열[3]=0,1,2,3 네번째 문자 / 문자열[-2]=-1,-2 뒤에서 두 번째 문자 / 문자열[시작번호:끝번호] / [시작번호:끝번호:간격]

  • a=pithon 문자열을 python으로 바꾸려면? = a[:1] + ‘y’ + a[2:] ::
    문자열은 immutable자료형이라서 a[1]=y 이렇게 못 바꾼다!

____문자열 포매팅

        :: ( ~ ~%d ~ “%3) / ( ~ ~%s ~ “%”red”) /

           number=3, ( ~ ~%d ~ “%number) /

           color=”red” ( ~ ~%d ~%s ~ “%(number,color))

           “I ate %d %s apples.”%(number,color) = I ate 3 red apples.

 

____문자열 포맷 코드

:: %s(문자열) / %c(문자1개) / %d(정수) / %f(부동소수) / %%(문자%자체)

 

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

:: 정렬과 공백 “%10s” % “hi” / 소수점 표현 “%0.4f” % 3.42134234

 

____format 함수를 사용한 포매팅

  • "I eat {0} apples".format(3)
  • "I eat {0} apples".format("five")
  • number = 3 >>> "I eat {0} apples".format(number)
  • number = 3, color = "red” “I ate {0} {1} apples.”.format(number,color) = I ate 3 red apples.
  • “I ate {number} {color} apples.”.format(number=3,color=”red”)
  • 인덱스와 이름 혼용 가능!
  • 오른쪽정렬 : >>> "{0:>10}".format("hi") = ' hi'
  • 공백채우기 : >>> "{0:!^10}".format("hi") = '!!!!hi!!!!'
  • 소수점 표현하기 : >>> y = 3.42134 >>> "{0:0.4f}".format(y) = '3.4213'

____f 문자열 포매팅

:: >>> age = 30

f'나는 내년이면 {age+1}살이 된다.' '나는 내년이면 31살이 된다.'

 

 

____문자열 관련 함수들

len() 문자열의 길이 반환
capitalize() 문자열의 첫 글자를 대문자로 변환
upper() 문자열을 모두 대문자로 변환
lower() 문자열을 모두 소문자로 변환
count() 문자열 내 특정 부분의 출현 횟수 반환
find() 문자열에서 특정 문자열의 위치 반환
index() 문자열에서 특정 문자열의 위치 반환 (find()와 유사하지만 해당 문자열이 없을 경우 오류를 발생시킴)
replace() 문자열 내 특정 부분을 다른 문자열로 대체
split() 문자열을 특정 기준으로 나누어 리스트로 반환
strip() 문자열 양 끝의 공백 제거
isdigit() 문자열이 숫자로만 이루어졌는지 여부 반환
isalpha() 문자열이 알파벳 문자로만 이루어졌는지 여부 반환
startswith() 특정 문자열로 시작하는지 여부 반환
endswith() 특정 문자열로 끝나는지 여부 반환
join() 리스트의 각 요소를 문자열로 결합할 때 사용

 

 

 

__02-3 리스트 자료형

____리스트는 어떻게 만들고 사용할까? :: 리스트명 = [요소1, 요소2, 요소3, …]

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

##인덱싱
>>> a = [1, 2, 3, ['a', 'b', 'c']]

>>> a[0]
1
>>> a[-1]
['a', 'b', 'c']
>>> a[3]
['a', 'b', 'c']

>>> a[-1][0]
'a'
##슬라이싱 : 문자열에서 했던 것과 사용법이 완전히 동일
>>> a = [1, 2, 3, 4, 5]
>>> b = a[:2]
>>> c = a[2:]
>>> b
[1, 2]
>>> c
[3, 4, 5]

 

____리스트 연산하기 : 더하기, 반복하기, 길이 구하기

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

>>> a + b #더하기
[1, 2, 3, 4, 5, 6]
>>> a * 3 #반복하기
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> len(a) #길이구하기
3

 

____리스트의 수정과 삭제

>>> a = [1, 2, 3]
>>> a[2] = 4     #리스트 값 수정
>>> a
[1, 2, 4]
>>>del a[1:]      #a[1:]인 2,3을 삭제한다! #del a[x]는 x번째 요솟값을 삭제
>>> a
[1]

 

 

____리스트 관련 함수

: append(), sort(), reverse(), index(), insert(), remove(), pop(), count(), extend()

my_list = [1, 3, 2, 4, 3]        # 리스트 생성

# append(): 리스트에 요소 추가     
my_list.append(5)                # [1, 3, 2, 4, 3, 5]
#*리스트 안에 리스트도 추가 가능함 append([5,5])면 => [1, 3, 2, 4, 3, [5,5]]

# sort(): 리스트 정렬
my_list.sort()                   # [1, 2, 3, 3, 4, 5]

# reverse(): 리스트 뒤집기: 순서대로 정렬 뒤 역순 정렬이 아니라 현재 리스트 그대로 거꾸로
my_list.reverse()                # [5, 4, 3, 3, 2, 1]

# index(): 특정 값의 인덱스 반환
index = my_list.index(3)         # index = 2

# insert(): 리스트에 요소 삽입 : insert(a, b) 리스트의 a번째 위치에 b를 삽입하는 함수
my_list.insert(2, "apple")       # [5, 4, 'apple', 3, 3, 2, 1]

# remove(): 리스트에서 특정 값 제거 : 리스트에서 첫 번째로 나오는 x를 삭제하는 함수
my_list.remove(3)                # [5, 4, 'apple', 3, 2, 1]

# pop(): 리스트에서 요소 끄집어내기 : 맨 마지막 요소를 리턴하고 그 요소는 삭제
popped_value = my_list.pop()     # popped_value = 1

# count(): 리스트에 포함된 요소 x의 개수 세기
count = my_list.count(3)         # count = 1

# extend(): 리스트 확장
#:extend(x)에서 x에는 리스트만 올 수 있으며 원래의 a 리스트에 x 리스트를 더함
my_list.extend([6, 7])           # [5, 4, 'apple', 3, 2, 6, 7]

 

 

 

 

__02-4 튜플 자료형

____튜플은 어떻게 만들까?

  • 리스트는 [ ]으로 둘러싸지만 튜플은 ( )으로 둘러싼다.
  • (요솟값을 변화시킬 수 없다는 점만 제외하면 리스트와 완전히 동일)
  • 리스트는 요소 값의 생성, 삭제, 수정이 가능하지만 튜플은 요소 값을 바꿀 수 없다.
  • : 튜플의 요솟값을 지우거나 변경하려고 하면 - 에러가 발생한다

 

____튜플 다루기 :: 인덱싱,슬라이싱,더하기,곱하기,길이구하기

+**튜플은 요솟값을 변경할수 없기 때문에 sort, insert, remove, pop과 같은 내장 함수가 없다

>>> t1 = (1, 2, 'a', 'b')
>>> t1[3] #인덱싱
'b'
>>> t1[1:] #슬라이싱
(2, 'a', 'b')

#튜플 더하기
>>> t2 = (3, 4)
>>> t3 = t1 + t2
>>> t3
(1, 2, 'a', 'b', 3, 4)
#튜플 곱하기
>>> t4 = t2 * 3
>>> t4
(3, 4, 3, 4, 3, 4)
#튜플 길이 구하기
>>> len(t1)
4

 

 

 

__02-5 딕셔너리 자료형

____딕셔너리란?

:: 리스트나 튜플처럼 순차적으로(sequential) 해당 요솟값을 구하지 않고 Key를 통해 Value를 얻는다.

baseball이라는 단어의 뜻을 찾기 위해 사전의 내용을 순차적으로 모두 검색하는 것이 아니라 baseball이라는 단어가 있는 곳만 펼쳐 보는 것이다.

 

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

{Key1:Value1, Key2:Value2, Key3:Value3, ...}

>>> dic = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> a = { 'a': [1,2,3]} #Value에 리스트도 넣을 수 있다

 

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

>>> a = {1: 'a'}

##**딕셔너리 쌍 추가하기**
>>> a[2] = 'b'
>>> a
{1: 'a', 2: 'b'}

>>> a['name'] = 'pey'
>>> a
{1: 'a', 2: 'b', 'name': 'pey'}

##**딕셔너리 요소 삭제하기**
>>>del a[1]
>>> a
{2: 'b', 'name': 'pey', 3: [1, 2, 3]}

 

 

____딕셔너리를 사용하는 방법

##**딕셔너리에서 Key 사용해 Value 얻기**
>>> dic = {'name':'pey', 'phone':'010-9999-1234', 'birth': '1118'}
>>> dic['name']
'pey'
>>> dic['phone']
'010-9999-1234'
>>> dic['birth']
'1118'
>>> dicexample = {1:'a', 2:'b'}
>>> dicexample[1]
'a'
#여기에서 a[1]은 리스트나 튜플의 a[1]과 다르다. 
#딕셔너리 변수에서 [ ] 안의 숫자 1은 두 번째 요소를 뜻하는 것이 아니라 Key에 해당하는 1을 나타낸다.

>>> dicexample2 = {'a':1, 'b':2}
>>> dicexample2['a']
1
##**딕셔너리 만들 때 주의할 사항1
#**Key는 고유한 값이므로 중복되는 Key 값을 설정해 놓으면 하나를 제외한 나머지 것들이 모두 무시된다

>>> a = {1:'a', 1:'b'}
>>> a                 #동일한 Key가 2개 존재할 경우 1:'a' 쌍이 무시됨
{1: 'b'}  

##**딕셔너리 만들 때 주의할 사항2 
#**Key에 리스트(mutable)는 쓸 수 없지만 튜플(immutable)은 Key로 쓸 수 있다.

 

 

____딕셔너리 관련 함수

a = {'name': 'pey', 'phone': '010-9999-1234', 'birth': '1118'} # 딕셔너리 생성

# keys(): **Key 리스트 만들기 :** 키(Key)들을 가져와서 dict_keys 객체 리턴
print(a.keys())      # dict_keys(['name', 'phone', 'birth'])

# values(): **Value 리스트 만들기 :** 값(Value)들을 가져옴
print(a.values())    # dict_values(['pey', '010-9999-1234', '1118'])

# items(): **Key, Value 쌍 얻기 :** 딕셔너리의 키와 값의 쌍을 가져옴
print(a.items())     # dict_items([('name', 'pey'), ('phone', '010-9999-1234'), ('birth', '1118')])

# clear(): 딕셔너리의 모든 항목 삭제
a.clear()
print(a)  # {}

# get(x): **Key로 Value얻기 :** x라는 Key에 대응되는 Value를 가져옴
print(a.get('name'))  # 'pey'

# 해당 Key가 딕셔너리 안에 있는지 확인 (in)
print('name' in a)    # True
print('email' in a)   # False

 

 

 

__02-6 집합 자료형

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

##set 키워드를 사용해 만들기
>>> s1 = set([1,2,3])
>>> s1
{1, 2, 3}

##set()의 괄호 안에 리스트를 입력하거나 다음과 같이 문자열 입력
>>> s2 = set("Hello")
>>> s2
{'e', 'H', 'l', 'o'}

#비어 있는 집합 자료형은 s = set()

 

____집합 자료형의 특징

  • 중복을 허용하지 않는다.
  • 순서가 없다(Unordered).
    • 리스트나 튜플은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만set 자료형에 저장된 값을 인덱싱으로 접근하려면 다음과 같이 리스트나 튜플로 변환한후 해야 한다
    • set 자료형은 순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다.
>>> s_1 = set([1,2,3]) 

>>> l_1 = list(s1)     #set 자료형 list 변환 
>>> l_1 [1, 2, 3] 
>>> l_1[0] 
1 

>>> t_1 = tuple(s1) #set 자료형 tuple 변환 
>>> t_1 (1, 2, 3) 
>>> t_1[0] 
1

 

 

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

# 두 개의 set 자료형 생성
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

# 1. 교집합  # "&" 기호 또는 intersection 함수로 교집합 구하기
print(s1 & s2)              # {4, 5, 6}
print(s1.intersection(s2))  # {4, 5, 6}

# 2. 합집합  # "|" 기호 또는 union 함수로 합집합 구하기
print(s1 | s2)       # {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s1.union(s2))  # {1, 2, 3, 4, 5, 6, 7, 8, 9}

# 3. 차집합  # "-" 기호 또는 difference 함수로 차집합 구하기
print(s1 - s2)            # {1, 2, 3}
print(s2 - s1)            # {8, 9, 7}
print(s1.difference(s2))  # {1, 2, 3}
print(s2.difference(s1))  # {8, 9, 7}

 

 

____집합 자료형 관련 함수

# 값 1개 추가하기(add)
s1 = set([1, 2, 3])
s1.add(4)
print(s1)  # {1, 2, 3, 4}

# 값 여러 개 추가하기(update)
s1 = set([1, 2, 3])
s1.update([4, 5, 6])
print(s1)  # {1, 2, 3, 4, 5, 6}

# 특정 값 제거하기(remove)
s1 = set([1, 2, 3])
s1.remove(2)
print(s1)  # {1, 3}

 

 

__02-7 불 자료형

____불 자료형은 어떻게 사용할까?

:: 불(bool) 자료형이란 참(True)과 거짓(False)을 나타내는 자료형

>>> a = True  #첫 문자를 항상 대문자로 사용해야 한다
>>> b = False

>>> type(a)
<class 'bool'>
>>> type(b)
<class 'bool'>

>>> 1 == 1
True
>>> 2 < 1
False

 

____자료형의 참과 거짓

참 or 거짓
"python"
"" 거짓
[1, 2, 3]
[] 거짓
(1, 2, 3)
() 거짓
{'a': 1}
{} 거짓
1
0 거짓
None 거짓

 

>>> a = [1, 2, 3, 4]
>>>while a:            #a가 참인 경우 a.pop()을 계속 실행하여 출력하라
...     print(a.pop())
...
4
3
2
1

#더 이상 끄집어낼 것이 없으면 a가 빈 리스트([])가 되어 거짓 -  while문을 빠져나

 

____불 연산

#bool 함수를 사용하면 자료형의 참과 거짓을 보다 정확하게 식별할 수 있다
>>> bool('python')
True
>>> bool('') #빈 문자열이므로 bool 연산의 결과로 불 자료형인 False를 리턴
False 
>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool(0)
False
>>> bool(3)
True

 

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

____변수는 어떻게 만들까? :: 변수 이름 = 변수에 저장할 값

____변수란?

:: 파이썬에서 사용하는 변수는 객체를 가리키는 것이라고도 말할 수 있다. 객체란 우리가 지금껏 보아 온 자료형의 데이터(값)와 같은 것을 의미하는 말이다

 

____리스트를 복사하고자 할 때

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

>>> id(a)
4303029896
>>> id(b)
4303029896
#id(a)의 값 = id(b)의 값 : a가 가리키는 대상 = b가 가리키는 대상

>>> a is b  # a와 b가 가리키는 객체는 동일한가?
True

b 변수에 a 변수를 대입하면 어떻게 될까? b는 a와 완전히 동일하다고 할 수 있다. 다만 [1, 2, 3] 이라는 리스트 객체를 참조하는 변수가 a 변수 1개에서 b 변수가 추가되어 2개로 늘어났다는 차이만 있을 뿐이다.

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

#a, b 모두 동일한 리스트를 가리키고 있기 때문에 덩달아 바뀜

 

 

그렇다면 b 변수를 생성할 때 a 변수의 값을 가져오면서 a와는 다른 주소를 가리키도록 만들수는 없을까?

  • 1) 리스트 전체를 가리키는 [:]을 사용해서 복사
  • >>> a = [1, 2, 3] >>> b = a[:] >>> a[1] = 4 >>> a [1, 4, 3] >>> b [1, 2, 3]
  • 2) copy 모듈 이용
  • >>>from copy import copy >>> a = [1, 2, 3] >>> b = copy(a) >>> b is a False #b와 a가 가리키는 객체는 서로 다름

 

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

# 튜플로 변수에 값 대입하기
a, b = 'python', 'life'  # a에 'python', b에 'life' 대입
# 또는 (a, b) = 'python', 'life'로 작성 가능

# 리스트로 변수에 값 대입하기
[a, b] = ['python', 'life']  # a에 'python', b에 'life' 대입

# 여러 변수에 같은 값 대입하기
a = b = 'python'  # a와 b에 모두 'python' 대입

# 변수 값 바꾸기
a = 3
b = 5
a, b = b, a  # a와 b의 값을 서로 바꿈 # 이제 a는 5, b는 3의 값을 갖게 됨