[Python] 02. Python 프로그래밍의 기초, 자료형

예뤼니·2023년 6월 3일

Python

목록 보기
2/4
post-thumbnail

1. 자료형이란?

=> 문자의 값을 숫자로 인식할 지 문자로 인식할 지 구분할 수 있게 해줌
ex) 1 + 1 = 2, '1' + '1' = '11'

1) 자료에 대한 타입 : 숫자, 문자열, bool
2) 어떤 값을 담는 자료구조 : 변수, 리스트, 튜플, 딕셔너리, 집합

2. 변수

  • 파이썬에서 사용되는 변수는 객체를 가리킴
  • 우변에 있는 값 또는 식을 좌변 변수에 대입 (ex. a = 3 a=a+1)
  • '='의 의미는 수학과 다름
  • type(변수) => 변수의 타입을 알 수 있음

1. 메모리와 주소

  • 변수는 메모리의 주소를 가리킴
    -> 메모리는 주소와 값을 지님
#ex1)
a = [1, 2, 3]
b = a #a가 가진 주소를 보내줌
a[1] = 4
print(b) #[1, 4, 3]출력, a[1] = 4는 메모리 상에서 바뀌었고 a와 b는 같은 주소를 가리킴

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

#ex3)
print(a is b) #True 출력, a와 b가 같은 주소를 가르키냐 물었음
  • 값을 주지만, 같이 변하지 않게 하기 위해서는
    1) slicing
    2) copy 모듈 사용
#ex1)
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)와 다름(주소 다름)

#ex2)
from copy import copy
a = [1, 2, 3]
b = copy(a) #주소가 아닌 값 할당, 주소 다름

2. 변수 만드는 법

  • '='사용

1) 튜플 이용

a, b = ('python', 'life')
print(a) #python출력
print(b) #life출력

2) 리스트 이용

a, b = ['python', 'life']
print(a) #python 출력
print(b) #life 출력

3) 같은 값 대입

a = b = 'hello'

4) 변수 값 교환

a = 3
b = 5
a, b = b, a
print(a) #5
print(b) #3

3. 숫자형

1) 타입

  • 정수형(int)(1, 2, -2)
  • 실수(float)(1.24, 34.56)
  • 컴퓨터식 지수 표현 방식(float)(4.24e10, 4.24e-10)
  • 8진수(0o37)
  • 16진수(0x74)

2) 사칙연산

  • 덧셈 : '+'
  • 뻴셈 : '-'
  • 곱셈 : '*'
  • 나누기 : '/'
  • 나눗셈 몫 : '//'
  • 나눗셈 나머지 : '%'
  • 제곱 : '**'

3. 문자열 자료형(str)

1) 따옴표

  • 큰 따옴표
    -> "Hello world"
  • 작은 따옴표
    -> 'Hello world'
  • 큰 따옴표 3개 : tab과 space, enter(줄바꿈) 자유롭게 가능
    -> """Life is too short, You need python"""
  • 작은 따옴표 3개 : tab과 space, enter(줄바꿈) 자유롭게 가능
    -> '''Life is too short, You need python'''

💡 \를 사용하면 따옴표 기호로 사용 가능

#ex)
a = 'Python\'s favorite food is perl'
print(a) # Python's favorite food is perl

2) 이스케이프 코드

-> 문자 ' or "를 따로 사용할 경우 \' or \"로 표현
-> 문자 \를 따로 사용할 경우 \로 표현
-> 문자열 사이에 줄바꿈을 하려면 \n
-> 문자열 사이에 탭 간격을 줄 때 \t
-> 캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동)하려면 \r
-> 벨 소리(출력할 때 PC 스피커에서 '삑' 소리남)를 하려면 \a
-> 벡스페이스하려면 \b
-> 널문자 \000

3) 문자열 덧셈, 곱셈

#ex)
a = "Python"
b = " is fun!"
print(a+b) #Python is fun!
print(a*100) #Python 100번 출력

4) 인덱싱(Indexing)

  • 문자열의 각 문자는 번호로 매겨짐
  • 0부터 시작
  • 역방향으로는 -1부터 시작
#ex)
a = "Life if too short, You need Python"
print(a[0])#'L'
print(a[1])#'i'
# 0부터 숫자를 세며 문자열 첫 시작 문자가 0번이 됨
print(a[-1]) #'n' 맨 뒤에서 부터 셈
print(a[-2]) # 'o'

5) 슬라이싱(Slicing)

a[x:y:z] => x 이상 y 미만 z 간격

#ex)
a = "Life if too short, You need Python"
print(a[0:4]) # "Life"  0~ 4-1
# a[A:B:C] #A 이상 B 미만 C 간격으로
print(a[:8]) #"Life if " 앞에 비워두면 처음부터 시작
print(a[::-1]) # 뒤집어서 한 칸씩 출력 (역순)
print(a[::-2]) #뒤집어서 두 칸씩 출력(역순)

6) 문자열 포매팅

#ex)
a = "I eat %d apples." %3
print(a) #"I eat %d apples."
b = "I eat " + str(3) + " apples" # 이렇게 번거롭지 않아도 됨

number = 10
day = "three"
c = "I ate %d apples. so I was sick for %s days." %(number, day)
  • %s : 문자열
  • %c : 문자 1개
  • %d : 정수
  • %f : qnehd thtn
  • %o : 8진수
  • %x : 16진수
  • %% : Literal % (문자 '%' 자체)
  • .format
  • f (파이썬 3.6부터 가능)
#ex)
a = "aasdf asdfasd fasdf {} asdfasd" .format("안녕")
print(a) #{} 사이에 안녕이 들어감
b = "aasdf asdfasd fasdf {name} asdfasd" .format(name = "호호")
print(b) #name 자리에 호호가 들어감

name = "int"
a = f"나의 이름은 {name}입니다" #앞에 f 하나만 붙여도 name 자리에 int 들어감

7) 정렬과 공백

  • 문자열
    문자열 포맷 코드 사용시 포맷 코드 사이에 숫자를 넣으면 그만큼의 공백이 생김
#ex)
a = "%10s" %"hi"
print(a) #          hi(앞에 10칸의 공백)
b = "%-10sjane." %"hi"
#hi          jane
  • 소수점 표현
    %와 f 사이에 숫자를 넣으면 소수를 자를 수 있음
    %간격.소수점 남기는 자리 수f
#ex)
a = "%0.4f" %3.42134234
print(a) #3.4213
#0.4 => 간격.소수점 남기는 자리 수 

8) 함수

  • 문자열 개수 세기 : count
    -> 주어진 문자열에 하나의 문자가 몇 개나 들어있는지 알려줌
#ex)
a = "hobby"
print(a.count('b')) #2
  • 위치 알려주는 함수

  • find
    -> 주어진 문자열에 찾고자 하는 문자가 들어간 가장 처음의 index (문자열에 해당 문자가 존재하지 않을 경우 -1 출력)

#ex)
a = "hobby"
print(a.find('b')) #2
print(a.find('x')) # -1
  • index
    ->주어진 문자열에 찾고자 하는 문자가 들어간 가장 처음의 index (문자열에 해당 문자가 존재하지 않을 경우 오류)
#ex)
a = "hobby"
print(a.find('b')) #2
print(a.find('x')) #오류 발생
  • 문자열 삽입 : join
    -> 앞에 나온 string을 문자열 사이에 삽입. (리스트에서 많이 사용)
#ex)
a = ",".join("abcd")
print(a) #a,b,c,d
#리스트 ex)
a=",".join(["a", "b", "c"])
print(a) #a,b,c
  • 소문자를 대문자로 바꾸기 (대문자-> 소문자도 해당) : upper, lower
#ex)
a = "hi"
print(a.upper()) ##HI

b = "HI"
print(a.lower()) #hi
  • 공백 없애주기 : strip
#ex)
a = "     HI   "
print(a.strip()) #HI
  • 문자열 바꾸기 : replace
    replace(a, b) => a->b로 교체
#ex)
a = "Life is too short"
a.replace("Life","Your leg")
print(a) # Your leg is too short 
  • 문자열 나누기 : split
    -> 문자열을 () 사이의 문자 기준으로 잘라서 list로 만듦
#ex)
a = "Life is to short"
print(a.split()) #["Life", "is", "to", "short"] 그냥 띄어쓰기 기준

b = "A:B:C"
print(b.split(":")) #["A","B", "C"]

4. 리스트(List)

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

#ex)
a = [] #빈칸
b = [1, 2, 3] #숫자
c = ['Life', 'is', 'too', 'short'] #문자
d = [1, 2, 'Life', 'is'] #문자 + 숫자
e = [1, 2, ['Life', 'is']] #리스트 안에 또 리스트 가능
print(e[2][1]) #Life

1. 인덱싱(Indexing)

#ex)
a = [1, 2, 3]
print(a[0]) #1
print(a[0]+a[2]) #4
print(a[-1]) #3

2. 슬라이싱(Slicing)

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

3. List 덧셈, 곱셈

#ex)
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 값 수정

#ex)
a = ["박주하", "잠수", "문재성"]
a[0] = "한재성"
print(a) #["한재성", "잠수", "문재성"]

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

5. List 값 삭제

1) [] 사용

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

2) del 함수 사용

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

6. List의 함수

1) 요소 추가 : append

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

2) 리스트 정렬 : sort

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

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

3) 리스트 뒤집기 : reverse

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

4 위치 반환 : index

#ex)
a = [1, 5, 3]
print(a.index(5)) #1

5) 리스트에 요소 삽입 : insert

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

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

6) 리스트 요소 제거 : remove

-> 지우고자 하는 값 제거
-> 괄호 안에 index가 아닌 값을 집어 넣음
-> 하나만 제거되므로 지우고자 하는 값이 여러 개일 경우 for문 사용하여 제거

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

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

-> 마지막 요소 출력 후 List에서 제거

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

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

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

9) 리스트 확장 : extend

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

5. 튜플(tuple)

  • 리스트와 튜플의 차이
    |리스트|튜플|
    |::|::|
    |대괄호[]|소괄호()|
    |변경 가능|변경 불가능|

1. 요소 변경 불가능

  • 요소 추가, 삭제, 값 변경 등이 불가능하다
#ex)

t1 = (1, 2, 'a', 'b')

del t1[0] #오류
t1[0] = 'c' #오류

2. Indexting

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

3. Slicing

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

4. 덧셈, 곱셈

  • 기존의 튜플이 변경되는 것이 아니고 기존의 튜플을 가지고 새로운 튜플을 만듦
t1 = (1, 2, 'a', 'b')
t2 = (3, 4)

#덧셈 ex)
print(t1 + t2) #(1, 2, 'a', 'b', 3, 4)

#곱셈 ex)
print(t1 * 3) #(1, 2, 'a', 'b', 1, 2, 'a', 'b', 1, 2, 'a', 'b')

6. 딕셔너리(dictionary)

  • 연관 배열(Associative array) 또는 해시(Hash)
  • key를 통해서 value 탐색
dic = {'name' : 'Eric', 'age : 19'}

1. 딕셔너리 쌍 추가

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

2. 딕셔너리 쌍 삭제

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

3. key를 이용해서 value 얻기

grade = {'pey' : 10, 'julliet' : 99}
print(grade['pey']) #10
print(grade['julliet']) #99

4. 딕셔너리를 만들 때 주의할 점

  • value는 중복가능
  • key는 중복 불가능
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

a = {'name' : 'pey', 'phone' : '01000000000', 'birth' : '0101'}
print(a.keys()) #dict_keys(['name', 'phone', 'birth']) 

2) value 리스트 만들기 values

a = {'name' : 'pey', 'phone' : '01000000000', 'birth' : '0101'}
print(a.values()) #dict_values(['pey', '01000000000', '0101'])

3) item 튜플 만들기 items()

  • 딕셔너리 전체 key와 value를 새로운 배열 안에 튜플 형태로 (key, value) 쌍을 생성함
a = {'name' : 'pey', 'phone' : '01000000000', 'birth' : '0101'}
print(a.items()) #dict_items([('name','pey'), ('phone', '01000000000'), ('birth', '0101')]) 


#실제 사용 예제

a = {'name' : 'pey', 'phone' : '01000000000', 'birth' : '0101'}

for k in a.keys():
	print(k) #'name'\n 'phone'\n 'birth'\n
    
for v in a.values():
	print(v) #'pey'\n '01000000000'\n '0101'\n
    
for k, v in a.items():
	print("key : ", str(k))
    print("value : ", v) #key : 'name'\n value : 'pey'\n ... 반복

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

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

5) key로 value 얻기 get

a = {1 : 'pey', 2 : '01000000000', 3 : '0101}

print(a[1])
print(a.get(1))
# 똑같이 'pey' 출력

#다른 점 : 없는 것을 출력할 때 유용
print(a[4]) #오류 발생
print(a.get(4)) #'None' 출력
print(a.get(4, '없음') #4라는 키가 없을 때 '없음' 출력

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

a = {'name' : 'pey', 'phone' : '01000000000', 'birth' : '0101'}
print('name' in a) #True 출력
print('age' in a) #False 출력

7. 집합(set)

1. 특징

  • 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형
  • 중복을 허용하지 않음
  • 순서가 없음
s1 = set("hello")
print(s1) #{'e', 'l', 'o', 'h'}

2. 정의

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

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

print(s1) #{1, 2, 3}
print(s2) #{1, 2, 3}

print(type(s1)) #<class 'set'>

💡lsit의 중복을 제거하기 위해 주로 사용

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)) #{4, 5, 6}

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)) #{1, 2, 3, 4, 5, 6, 7, 8, 9}

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)) #{1, 2, 3}
print(s2.difference(s1)) #{7, 8, 9}

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

❗리스트 형태로 넣어줘야 함
-> 기존에 존재한 값을 넣으면 오류는 나타나지 않지만 중복되게 추가되지는 않는다

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"|참|
|""|거짓|
|[1, 2, 3]|참|
|[]|거짓|
|()|거짓|
|{}|거짓|
|1|참|
|0|거짓|
|None|거짓|

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




<[출처] 조코딩, "최신 파이썬 코딩 무료 강의", https://www.youtube.com/watch?v=KL1MIuBfWe0&list=PLU9-uwewPMe2AX9o9hFgv-nRvOcBdzvP5> 을 참고하여 작성한 글입니다.

0개의 댓글