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의 값을 갖게 됨
'파이썬기초 > 파이썬기본개념2' 카테고리의 다른 글
[점프투파이썬] ## 04장 파이썬의 입출력 [#파이썬공부기록-요약정리] (0) | 2023.11.22 |
---|---|
[점프투파이썬] 03장 프로그램의 구조를 쌓는다! 제어문 [#파이썬공부기록-요약정리] (0) | 2023.11.22 |