<Python>02.파이썬 프로그래밍의 기초, 자료형

박서연·2023년 1월 16일
0

Python

목록 보기
2/8
post-thumbnail

0. 자료형

문자의 값을 숫자로 인식할지, 문자로 인식할지 구분

  1. 자료에 대한 타입: 숫자, 문자열, bool

  2. 어떤 값을 담는 자료구조: 변수, 리스트, 튜플, 딕셔너리, 집합

1. 변수

파이썬에서 사용되는 변수는 객체를 가리킴
우변에 있는 값 또는 식을 좌변 변수에 대입
수학적으로 같다는 말의 등호(=)와 다름

💡 example

a = 3
a = a+1

1. 메모리와 주소

🔅 변수는 메모리의 주소를 가리킴, 메모리는 주소와 값을 지님

#1
a = [1,2,3]
b = a	#a가 가진 주소를 보내줌
a[1] = 4
print(b)	#[1,4,3] 출력, a[1]=4는 메모리 상에서 바뀌었고 a와 b는 같은 주소를 가리키므로 b가 가리키는 주소의 값도 바뀜

#2
print(id(a))	
print(id(b))	#id(a)와 같은 (주소)값 출력

#3
print(a is b)	#True 출력, a와 b가 같은 주소를 가리키는지

🔅 변경 전 list를 주고싶다면,
1) slicing
2) copy 모듈 사용

#1
a = [1,2,3]
b = a[:]	#slicing하면 새로운 list가 생기는 것으로 복사됨
a[2] = 4
print(a)	#[1,4,3] 출력
print(b)	#[1,2,3] 출력
print(id(a))	
print(id(b))	#id(a)와 다름
#2
from copy import copy
a = [1,2,3]
b = copy(a)	#주소가 아닌 값 할당, 주소 다름

2. 변수 만드는 법

1) 튜플 이용

a, b = ('python', 'life')
print(a)	#python 출력
print(b)	#life 출력
  1. 리스트 이용
a, b = ['python', 'life']
print(a)	#python 출력
print(b)	#life 출력
  1. 같은 값 대입
a = b = 'hello'
  1. 변수 값 교환
a = 3
b = 5
a, b = b, a
print(a)	#5 출력
print(b)	#3 출력

2. 숫자형 (int, float)

1. type

#아래와 같이 type 사용해 자료형 구함
a=1
print(type(a))

✔ 정수형 => int
ex) 1, 2, -2

✔ 실수 => float
ex) 1.24, -34.56

2. 사칙연산

💡 example

a = 3 
b = 4
print(a+b)	#7
print(a*b)	#12
print(a/b)	#0.75, Java에서는 몫이 나오지만 파이썬에서는 나누기한 값
print(a//b) #0, 파이썬에서의 몫 출력
print(a%b)	#3, 파이썬에서의 나머지 출력
print(a**b)	#81, a의 b제곱

3. 문자열 (str)

1. 문자열 자료형 만드는 법

💡 example

#1. 큰 타옴표
"Hello World"
#2. 작은 따옴표
'Hello World'
#3. 큰 따옴표 * 3	=> tab과 space, enter 모두 인식
"""Life is too short, You need python"""
#4. 작은 따옴표 * 3
'''Life is too short, You need python'''

🔅 따옴표가 겹칠 경우, 따옴표 앞에 \ 붙이면 사용 가능

a = 'Python\'s favorite food is perl'

print(a)

2. 이스케이프 코드

프로그래밍할 때 사용할 수 있도록 미리 정의해 둔 문자 조합으로,
주로 출력물을 보기 좋게 정렬하는 용도로 사용

\n : 줄 바꿈

\t : 탭 간격

\\ : slash 그대로 사용

\' : 작은 따옴표(') 그대로 사용

\" : 큰 따옴표(") 그대로 사용

3. 문자열 덧셈, 곱셈

💡 example

a = "python"
b = "is fun"
print(a+b)		#python is fun 출력
print(a*100)	#python을 100번 출력

4. Indexing

변수에 지정된 문자열의 각 문자는 번호로 매겨질 수 있는데,
이를 index 라 부르며 index는 0부터 시작하며 -는 역방향으로 1부터 시작

💡 example

a = "Life is too short, You need python"
print(a[0])	#L 출력
print(a[-1])	#맨 뒤 문자 n 출력
print(a[-2])	#뒤에서 2번째 문자 o 출력

5. Slicing

a[ x : y : z ] 는
문자열 a에서 index가 x 이상 y 미만인 문자를 z 간격으로 잘라내는 slicing 의미

💡 example

a = "20010331Rainy"
b = "12345678"
c = "12123425125"
print(a[:8])	#20010331 출력, 시작값은 없으므로 처음부터 index 8 미만까지
print(a[8:])	#Rainy 출력, 마지막값이 없으므로 index 8부터 끝까지 
print(b[::2])	#1357 출력, 처음부터 끝까지 2간격
print(c[::-2])	#512311 출력, 간격이 - 이므로 뒤에서부터 끝까지 2간격

6. 문자열 포매팅

1) 문자열 포맷 코드 사용

문자열 포맷 코드

코드설명
%s문자열(String)
%c문자 1개(Character)
%d정수(Integer)
%f부동소수(Floating-point)
%o8진수
%x16진수
%%Literal % (문자 '%' 자체)

💡 example

#1
a = "I eat %d apples." %3
print(a)	#I eat 3 apples. 출력
#2
number = 10
day = "three"
b = "I ate %d apples. so I was sick for %s days." %(number, day)
print(b)	#I ate 10 apples. so I was sick for three days. 출력

2) .format 사용
💡 example

#1
a = "{}".format("안녕")
print(a)	#안녕
#2
b = "{name}은 {age}살이다".format(name="이시영", age=20)	#이시영은 20살이다
print(b)

3) f 사용
파이썬 3.6 버전 이상만 가능
💡 example

name = "이시영"
a = f"나의 이름은 {name}입니다"
print(a)	#나의 이름은 이시영입니다

7. 정렬과 공백

문자열 포맷 코드 사용시 포맷 코드 사이에(ex.%s일 경우 %와 s 사이) 숫자를 넣으면 그만큼의 공백이 생긴 후 값이 들어감

💡 example

a = "%10s" %"hi"
print(a)	#          hi 출력 (앞은 공백)

7. 소수점 표현

문자열 포맷 코드 사용시 포맷 코드 사이에(ex.%s일 경우 %와 s 사이) 숫자를 넣으면 . 뒤에 나온 수만큼 소수점을 자른다

💡 example

a = "%0.4f" %3.42134234
print(a)	#3.4213 출력

8. 함수

1) 문자열 세기 count

주어진 문자열에 하나의 문자가 몇 개나 들어가있는가

💡 example

a = "hobby"
a.count('b')	#2 출력

2) 위치 알려주기 find

주어진 문자열에 하나의 문자가 들어간 index,
문자열에 해당 문자가 존재하지 않을 경우 -1 출력

💡 example

a = "Python is best choice"
a.fint("b")

3) 위치 알려주기 index

주어진 문자열에 하나의 문자가 들어간 index,
문자열에 해당 문자가 존재하지 않을 경우 오류 발생

💡 example

a = "Life is too short"
a.index("t")	#8 출력
a.index("k")	#오류 발생

4) 문자열 삽입 join

뒤에 나온 문자열을 앞에 나온 string 기준으로 쪼개짐, 리스트에서 많이 사용

💡 example

a = ",".join("abcd")
print(a)	#a,b,c,d 출력

=> list에서의 사용예
💡 example

a = ",".join(["a","b","c"])
print(a)	#a,b,c 출력

5) 소문자를 대문자로(대문자를 소문자로) 바꾸기 upper,lower
💡 example

a = "hi"
a.upper()	#HI 출력

6) 공백 없애주기 strip
💡 example

a = "		HI		"
print(a.strip())	#HI 출력

7) 문자열 바꾸기 replace
💡 example

a = "Life is too short"
a.replace("Life","Your leg")
print(a)	#Your leg is too short 출력

8) 문자열 나누기 split

문자열 자료형이 있으면 () 사이의 문자 기준으로 잘라서 list로 만드는 함수

💡 example

a = "Life is too short"
print(a.split())	#["Life","is","too","short"]

4. 배열 (list)

변수 여러개를 묶는 역할
빈 값, 숫자, 문자, 숫자+문자, 리스트 등 다양한 형태의 요소 가능

💡 example

#1
a = ["이시영","문재성","int","김정현"]	#list형태
print(a[1])	#문재성 출력, index 형태
#2
b = [1,2,"int","김정현",["김재원","Manse samdori"]]
print(b[4][1])	#Manse samdori 출력

1. Indexing

💡 example

a = [1,2,3]
a[0]	#1 출력
a[0]+a[2]	#4 출력
a[-1]	#3 출력

2. Slicing

💡 example

a = [1,2,3,4,5]
a[0:2]	#1,2 출력
b = a[:2]	
c = a[2:]
print(b)	#1,2 출력
print(c)	#3,4,5 출력

3. list 덧셈, 곱셈

💡 example

a = [1,2,3]
b = [4,5,6]
print(a+b)	#[1,2,3,4,5,6] 출력
print(a*3)	#[1,2,3,1,2,3,1,2,3] 출력

4. list 값 수정

💡 example

#1
a = ["박주하", "잠수", "문재성"]
a[0] = "한재성"
print(a)	#["한재성","잠수","문재성"] 출력
#2
b = ["박주하", "잠수", "문재성"]
b[0:2] = ["김정현","Stopmotion Man"]
print(b)	#["김정현","Stopmotion Man","문재성"] 출력

5. list 값 삭제

1) [] 사용

a = ["박주하", "잠수", "문재성"]
a[:2] = []
print(a)	#["문재성"] 출력

2) del 함수 사용

a = ["박주하", "잠수", "문재성"]
del a[0]
print(a)	#["잠수","문재성"] 출력

5. 함수

1) 요소 추가 append
💡 example

a = ["박주하", "잠수", "문재성"]
a.append("시우버")
print(a)	#["박주하","잠수","문재성","시우버"] 출력

2) 리스트 정렬 sort

문자의 경우, 가나다 혹은 알파벳순, 숫자의 경우 오름차순으로 정렬

💡 example

a = [1, 5, 3]
a.sort()
print(a)	#[1, 3, 5] 출력

3) 리스트 뒤집기 reverse
💡 example

a = [1, 5, 3]
a.reverse()
print(a)	#[3, 5, 1] 출력

4) 위치 반환 index
💡 example

a = [1, 5, 3]
print(a.index(5))	#1 출력, index 1 자리에 5 존재

5) 리스트에 요소 삽입 insert

특정 index에 값 삽입
a.insert(x,y)
index x 위치에 y 값 삽입

💡 example

a = [1, 2, 3]
a.insert(0,4)	#[4,1,2,3] 출력

6) 리스트 요소 제거 remove

지우고자하는 제거, index 아님
remove 사용시 하나만 제거되므로 리스트에 지우고자하는 값이 여러개일 경우 for문 사용해서 제거

💡 example

a = [1, 5, 3]
a.remove(1)
print(a)	#[5, 3] 출력

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

마지막 요소 출력 후 리스트에서 제거

💡 example

a = [1, 5, 3]
print(a.pop())	#3 출력
print(a)	#[1, 5] 출력

8) 리스트에 포함된 요소 개수 세기 count
💡 example

a = [1, 5, 3, 1, 1]
print(a.count(1))	#3 출력

9) 리스트 확장 extend
💡 example

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] 출력

5. 튜플 (tuple)

🔅 리스트와 튜플의 차이

리스트튜플
대괄호[ ]소괄호( )
변경가능변경불가능

1. 요소 변경

튜플은 요소 변경(요소 추가, 삭제, 값 변경) 허용하지 않음

2. Indexting

💡 example

t1 = (1, 2, 'a', 'b')
t1[0]	#1 출력

3. Slicing

💡 example

t1 = (1, 2, 'a', 'b')
t1[1:]	#(2, 'a', 'b') 출력

4. 튜플 덧셈과 곱셈

기존의 튜플이 변경되는 것이 아니고 기존의 튜플을 가지고 새로운 튜플을 만드는 것

💡 example

#1
t1 = (1, 2, 'a', 'b')
t2 = (3, 4)
print(t1+t2)	#(1,2,'a','b',3,4) 출력
#2
t1 = (1, 2, 'a', 'b')
print(t1 * 3)	#(1,2,'a','b',1,2,'a','b',1,2,'a','b') 출력

🔅 새롭게 정의한 튜플
아래와 같은 경우는 튜플을 바꾸는 것이 아니라 새롭게 정의한 것으로 튜플 변경

💡 example

a = (1,2)
a = a * 3
print(a)	#(1,2,1,2,1,2)출력

6. 딕셔너리 (dictionary)

key를 이용해 value 탐색,
연관 배열(Associative array) 또는 해시(Hash)

💡 example

dic = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}

1. 쌍 추가

💡 example

a = {1:'a'}
a["name"] = "익명" 
print(a)	#{1:'a', 'name':'익명'}

2. 쌍 삭제

💡 example

a = {1:'a','name':'익명'}
del a[1]	#이때 [] 안에는 key값이 들어감,index 아님
print(a)	#{'name':'익명'} 출력

3. key 사용해 value 얻기

💡 example

grade = {'pey':10, 'julliet':99}
grade['pey']	#10 출력

4. 만들 때 주의사항

🔅 value는 중복되도 되지만 key는 중복되면 안 됨
💡 example

a = {1:'a', 1:'b'}
print(a)	#{1:'b'} 출력 (key값 중복)
a = {1:'a', 2:'b'}
print(a)	#{1:'a', 2:'b'} 출력

5. 함수

1) key 리스트 만들기 keys
💡 example

a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.keys()	#dict_keys(['name','phone','birth']) 출력

2) value 리스트 만들기 values

a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.values()	#dict_values(['pey', '0119993323', '1118']) 출력

3) item 튜플 만들기 items()

dictionary 전체 key와 value를 새로운 배열 안에 튜플 형태로 (key,value)쌍을 생성

a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.items()	#dict_items([('name','pey'), ('phone','0119993323'), ('birth','1118')])

✔ 실제 사용 예제

#1
a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
for k in a.keys():
	print(k)	#'name'\n 'phone'\n 'birth'
#2
for v in a.values():
	print(v)	#'pey'\n '0119993323'\n '1118'
#3
for k, v in a.items():
	print("key:", str(k))	
    print("value:", v)	#key:1\n value:pey\n ...(반복)

4) key:value 쌍 모두 지우기 clear

a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
a.clear()
print(a)	#{}

5) key로 value 얻기 get

a = {1:'pey', 2:'0119993323', 3:'1118'}
#비교
print(a[1])	#pey 출력
print(a[4])	#오류 발생
#get 사용
print(a.get(1))	#pey 출력
print(a.get(4))	#None 값 출력
print(a.get(4,'없음'))	#없음 출력

6) 해당 key가 딕셔너리 안에 있는지 조사 in

a = {'name':'pey', 'phone':'0119993323', 'birth':'1118'}
print('name' in a)		#True 출력
print('email' in a)	#False 출력

7. 집합 (set)

1. 특징

✔ 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형
✔ 요소가 중복될 수 없음
순서가 없음
💡 example

s1 = set("hello")
print(s1)	#{'e','l','o','h'}

2. 정의

1) set() 안에 list 삽입
2) 중괄호{} 내에 요소 삽입

s1 = set([1,2,3])
s2 = {1,2,3}

🔅 주로 사용
중복되는 list의 중복 제거
💡 example

l = [1,2,2,3,3]
new_list = list(set(l))
print(new_list)	#[1,2,3]

3. 연산

1) 교집합 & (&)

s1.intersection(s2)와 동일 의미

s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1&s2)	#{4,5,6} 출력
print(s1.intersection(s2))	#위와 동일한 코드

2) 합집합 |

s1.union(s2)와 동일 의미

s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1|s2)	#{1,2,3,4,5,6,7,8,9} 출력
print(s1.union(s2))	#위와 동일한 코드

3) 차집합 -

s1.difference(s2)와 동일 의미

s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1-s2)	#{1,2,3} 출력
print(s2-s1)	#{7,8,9} 출력, 순서에 따라 값 달라짐
print(s1.difference(s2))	#위와 동일한 코드

4. 함수

1) 값 1개 추가 add

s1 = set([1,2,3,4,5,6])
s1.add(7)
print(s1)	#{1,2,3,4,5,6,7} 출력

2) 값 여러개 추가 update

list 형태로 넣어줘야함, 기존에 존재한 값을 넣어도 오류X 나타나지는 않음

s1 = set([1,2,3,4,5,6])
s1.update([7,8,9,1])
print(s1)	#{1,2,3,4,5,6,7,8,9} 출력

3) 특정 값 제거 remove

s1 = set([1,2,3])
s1.remove(2)
print(s1)	#{1,3} 출력

8. 불 (boolean)

True와 False 값으로 되어있음
boolean을 줄여서 bool이라 부름

a = True
print(type(a))	#bool 출력

자료형의 True/False

True/False
"python"True
""False
[1,2,3]True
[]False
()False
{}False
1True
0False
NoneFalse

🔅 요소가 있으면 True, 비어있는 상태면 False

0개의 댓글