본문 바로가기

미래 먹거리를 위하여

[파이썬 정복하기] 점프 투 파이썬 2장 – 파이썬 프로그래밍의 기초, 자료형 ① (책 없이 시작하기)

2. 파이썬 프로그래밍의 기초, 자료형

자료형: 프로그래밍을 할 때 쓰이는 숫자, 문자열 등과 같이 자료 형태로 사용하는 모든 것을 뜻함. 프로그램의 기본이자 핵심 단위.

 

2-1.  숫자형(Number Type)

  • 파이썬은 정수형과 실수형을 자동으로 구분해줌
  • 0으로 나누면 오류 발생 (ZeroDivisionError)
  • 정수와 실수 연산 시 결과는 항상 실수(float)로 출력됨
구분 설명 예시 결과
정수형 (int) 양수, 음수, 0 등 소수점 없는 수 a = 123, b = -456, c = 0 그대로 출력됨 (123, -456, 0)
실수형 (float) 소수점이 포함된 숫자 a = 1.2, b = -3.45 그대로 출력됨 (1.2, -3.45)
지수 표현 (float) e 또는 E를 사용해 10의 거듭제곱 표현 1.2e3, -3.4E-2 1200.0, -0.034
8진수 (octal) 0o(숫자 0 + 알파벳 o)로 시작
※ 파이썬에서 잘 사용 X
0o10 8 (10₈ = 8₁₀)
16진수 (hexadecimal) 0x로 시작
※ 파이썬에서 잘 사용 X
0x10, 0xFF 16, 255

※ 숫자형 연산 정리

연산자 설명 예시 결과 참고
+ 덧셈 3 + 4 7  
- 뺄셈 7 - 4 3  
* 곱셈 3 * 4 12  
/ 나눗셈 (결과는 float) 7 / 2 3.5  
// 나눗셈의 몫을 반환 7 // 4 1
% 나눗셈의 나머지 반환 7 % 3 1
** x의 y제곱(𝑥ʸ) 값을 반환 3 ** 4 81  

2-2. 문자형

연속된 문자들의 나열을 말함. 나열된 문자는 변경 불가능함.

구분 설명 예시 결과
문자열 생성 작은따옴표(')나
큰따옴표(")로 감싸서 생성
" 'Hello',"Python" " 'Hello', "Python"
여러 줄 문자열 ''' ... ''' 또는 """ ... """ 사용 '''Life is too short\nYou need python''' Life is too short
You need python
이스케이프 문자 \n 줄바꿈, \t 탭, \\ 백슬래시,
\' 작은따옴표
\" 큰 따옴표 표현 시 사용
"Hello\nPython" Hello
Python
문자열 연결(+) 문자열끼리 이어붙이기 "Hello" + "Python" HelloPython
문자열 반복(*) 문자열을 반복 출력 "Hi" * 3 HiHiHi
문자열 길이(len) 문자열 길이 구하기
(공백문자도 포함)
len("Python") 6
인덱싱 문자열의 특정 문자 접근
(0부터 시작)
①"Python"[0]
②"Python"[-1]
①'P' , ② 'n'
※ P y t h o n
= 0 1 2 3 4 5
슬라이싱 문자열 일부 잘라내기 ①"Python"[0:3]
② Pithon 문자열을 Python으로 바꾸기
①'Pyt'
※끝 인덱스는 포함되지 않음. 0부터 3개만 잘라냄.

a = "Pithon"
a[:1]
'P'
a[2:]
'thon'
a[:1] + 'y' + a[2:]
'Python'
포매팅(%d, %숫자) 문자열 안에 숫자 넣기 "I have %d apples" % 3 I have 3 apples
포매팅(%d%, %숫자)  문자열 안에 숫자% 넣기 "Error is %d%%." % 98 'Error is 98%.'
포매팅(%s, %"문자") 문자열 안에 문자넣기 "I eat %s apples." % "five"
"rate is %s" % 3.234
I eat five apples.
'rate is 3.234'
포매팅 2개 이상 사용 여러 개의 값을 넣고 싶을 때 number = 10
day = "three"
"I ate %d apples. so I was sick for %s days." % (number, day)
※ % 다음 괄호 안에  쉼표로 구분하여 각각의 값 입력
I ate 10 apples. so I was sick for three days.
포매팅(정렬과 공백) 포맷 코드를 숫자와 함께 사용 ① "%10s" % "hi"
= %10s는 전체 길이가 10개인 문자열에서 값을 오른쪽으로 정렬하고 앞의 나머지는 공백으로 남겨 두라는 의미
② "%-10sjane." % 'hi'
'hi        jane.'
=hi를 왼쪽으로 정렬하고 나머지는 공백으로 채우라는 의미
① '        hi'


'hi        jane.'
포매팅
(%개수f, %소수점)
소수점 표현 "%0.4f" % 3.42134234
※ %0.4f = %.4f
'3.4213'
포매팅(format) .format() 메서드 사용 ① "I have {} apples".format(3)
② "I eat {0} apples".format("five")
'I eat five apples'
"{{ and }}".format()
f'{{ and }}'
① 'I have 3 apples'
 'I eat five apples'
③ '{ and }'
f-string (추천) f 문자열 포매팅
Python 3.6+ 신문법
① name = "Tom"
    f"My name is {name}"
f"난 {1500000:,}원이 필요해"
①'My name is Tom'
 '난 1,500,000원이 필요해'

※ 문자형 함수료 정리

함수 설명 예시 결과
count() 문자열 안에 특정 문자가 몇 번 등장하는지 반환 "banana".count('a') 3
find() 왼쪽부터 탐색, 찾는 문자의 위치(index) 반환
but 없으면 -1 반환
"banana".find('n') 2
rfind() 오른쪽부터 탐색, 찾는 문자의 위치 반환
but 없으면 -1 반환
"banana".rfind('n') 4
index() 찾는 문자의 위치(index) 반환
but 없으면 오류 발생(ValueError)
"banana".index('b') 0
join() 리스트나 튜플의 요소를 특정 구분자로 이어붙임
리스트 → 문자열 변환
",".join(['a','b','c'])
= ",".join('abc')
'a,b,c'
upper() 모든 문자를 대문자로 변환 "python".upper() 'PYTHON'
lower() 모든 문자를 소문자로 변환 "PYTHON".lower() 'python'
strip() 문자열 양쪽 공백 제거 " hello ".strip() 'hello'
lstrip() 왼쪽 공백 제거 " hello ".lstrip() 'hello '
rstrip() 오른쪽 공백 제거 " hello ".rstrip() ' hello'
replace(a, b) 문자열 내 a를 b로 치환 "Life is short".replace("Life", "Time") 'Time is short'
split() 공백(또는 지정한 문자)을 기준으로 나눠 리스트로 반환 "Life is short".split() ['Life','is','short']
split(',') 쉼표 기준으로 나누기 "a,b,c".split(',') ['a','b','c']
startswith() 지정한 문자로 문자열이 시작하는지 확인 "Python".startswith('Py') True
endswith() 지정한 문자로 문자열이 끝나는지 확인 "Python".endswith('on') True
capitalize() 문자열첫 글자만 대문자로 "python".capitalize() 'Python'
title() 각 단어첫 글자만 대문자 "hello world".title() 'Hello World'
center(width) 문자열을 지정한 폭(width)만큼 가운데 정렬 "hi".center(10) ' hi '
zfill(width) 문자열을 지정한 길이만큼 0으로 채움 "42".zfill(5) '00042'

2-3. 리스트(List)

여러 값을 한꺼번에 다루는 컨테이너형 자료형. 리스트는 안에는 어떠한 자료형도 포함할 수 있음. 즉, 값 변경, 추가, 삭제 모두 가능.

구분 설명 예시 결과
리스트 생성 대괄호 []를 이용해 여러 값 저장 a = [1, 2, 3] [1, 2, 3]
여러 자료형 혼합 가능 숫자, 문자열, 리스트 등 섞어서 저장 가능 a = [1, "apple", [2,3]] [1, 'apple', [2, 3]]
빈 리스트 생성 빈 리스트 만들기 a = [] 또는 a = list() []
인덱싱 특정 위치의 요소 접근 ① a = [10, 20, 30]; a[0]
a[-1]
 10
② 30
10, 20, 30
=  0    1    2 
= -3  -2  -1
중첩 인덱싱 리스트 안의 리스트 접근
앞의 [ ]는 바깥 리스트,
뒤의 [ ]는 안쪽 리스트의 인덱스를 의미.
a = [1, [2, 3, 4]]; a[1][2]

4
a = [1, [2, 3, 4]]
   a =   0  __1___ 
            ↓         
   a[1] = [2, 3, 4]
               0  1   2
   a[2] =  4
슬라이싱 일부 요소 잘라내기

※ a[시작:끝] 구조는
시작 인덱스 이상, 끝 인덱스 미만”의 범위
 [:]는 왼쪽은 포함, 오른쪽은 제외!
a = [1, 2, 3, 4, 5]; a[1:4]
a = [1, 2, 3, 4, 5]; a[:3]
a = [1, 2, 3, 4, 5]; a[2:]
a = [1, 2, 3, 4, 5]; a[:]
[2, 3, 4]
 a = [1, 2, 3, 4, 5]
   a =   0 1  2  3  4 
            ↓         
   a[1:4] = 2, 3, 4
② [1, 2, 3]
 [3, 4, 5]
 [1, 2, 3, 4, 5]
연결(+) 두 리스트 이어붙이기 [1, 2] + [3, 4] [1, 2, 3, 4]
반복(*) 리스트를 반복해 확장 [1, 2] * 2 [1, 2, 1, 2]
길이(len) 리스트 요소 개수 len([1, 2, 3, 4]) 4

 

※ 리스트 수정 및 삭제 정리

동작 설명 예시 결과
요소 수정 특정 인덱스의 값 변경 a = [1, 2, 3]
a[1] = 99
a
[1, 99, 3]
요소 삭제 (del) 인덱스로 삭제
앞의 예시와 같이 세미클론으로 코드를 붙여쓰면 
아무것도 실행되지 않는다.
ex) a = [1, 2, 3]; del a[1]
del은 명령문(statement) 으로 
단순히 리스트 내부를 변경하는 명령이다.
a = [1, 2, 3]
del a[1]
a
[1, 3]
슬라이싱으로 삭제 여러 요소 한꺼번에 삭제 a = [1, 2, 3]
del a[1:3]
a
[1]

※ 리스트 관련 주요 함수

함수 설명 예시 결과
append(x) 리스트 끝에 요소 추가 a = [1,2] (공통조건)
a.append(3)
a
[1, 2, 3]
insert(i, x) 지정 위치(i)에 요소 삽입 a.insert(1, 99)
a
[1, 99, 2, 3]
extend(iterable) 리스트에 다른 리스트 연결 a.extend([4,5])
a
※ 리스트 확장 같은 의미
a.extend([4,5])
= a += [4, 5]
= a = a + [4, 5]
[1, 2, 3, 4, 5]
remove(x) 첫 번째로 나오는 x 삭제 a = [1,2,3,2] (공통조건)
a.remove(2)
a
[1, 3, 2]
pop([i])
인덱스 i의 리스트에서 마지막 값을 꺼내는 동작 a = [1,2,3,2]
    a.pop()
② a = [1,2,3,2]
    a.pop()
    2
    a
① 2 (마지막 값 출력)
 [1, 2, 3]
(마지막 값이 삭제된 리스트 출력)
count(x) 리스트 안에 x가 몇 번 등장하는지 a.count(2) 2
index(x) 리스트에서 x의 첫 번째 위치 값 반환 a.index(3) 2
sort() 오름차순 정렬 a.sort()
a
[1, 2, 2, 3]
reverse() 순서 뒤집기(역순으로 정렬) a.reverse()
a
[3, 2, 2, 1]
clear() 리스트의 모든 요소 삭제 a.clear()
a
[]
copy() 리스트 복사 (얕은 복사) b = a.copy()
b
[1, 2, 3, 2]

※ 반환값 있음(→ 셸에 값이 바로 출력됨): pop, count, index

나머지는 반환값이 없기 때문에 a(변수 이름)을 입력해야 결과를 확인할 수 있다.

 

TIP. 파이썬의 “객체 생성(Object creation): [1, 2]처럼 리터럴(literal) 로 직접 쓴 리스트도,
자동으로 메모리에 “객체(리스트)”가 생성된다. 즉, “변수에 담지 않아도” 파이썬 내부에서는 임시로 그 객체를 만든다.

비교 연산자 의미 비교대상 예시 결과
== 값(value) 이 같은가?
= 모양(내용)이 같은가?
리스트 안의 내용 비교
→ 값만 비교
[1,2]==[1,2] True
is 객체(object) 가 같은가?
= 진짜 같은 변수(상자)인가?
메모리 주소(위치) 비교 [1,2] is [1,2]
= 임시 리스트 객체1 is 임시 리스트 객체2
False

2-4. 튜플(Tuple)

튜플은 “변하지 않는 리스트”처럼 동작한다. ( )를 쓰며, 수정은 안 되지만 접근·연결·슬라이싱은 가능

구분 설명 예시 결과
튜플 생성 소괄호 ( ) 사용 t1 = (1, 2, 3)(공통조건) (1, 2, 3)
괄호 생략 가능 쉼표로만 구분해도 튜플로 인식 t2 = 1, 2, 3 (1, 2, 3)
한 개 요소 튜플 쉼표 필수 (괄호만 있으면 그냥 숫자)
※ 1개의 요소만을 가질 때는 요소 뒤에 쉼표(,)를 반드시 붙여야함.
t3 = (1,) (1,)
빈 튜플 아무 요소도 없는 튜플 t4 = () ()
인덱싱 리스트처럼 인덱스로 접근 가능 ① t1 = (1, 2, 3)
     t1[0]
t1 = (1, 2, 'a', 'b')
    t1[3]
 1
'b'
슬라이싱 일부 요소 추출 가능 t1[1:3] (2, 3)
연결(+) 튜플끼리 이어붙이기 (1, 2) + (3, 4) (1, 2, 3, 4)
반복(*) 튜플 내용 반복 (1, 2) * 2 (1, 2, 1, 2)
길이(len) 요소 개수 확인 len((1, 2, 3)) 3

 

※ 주의사항

동작 가능여부 예시 결과/설명
요소 수정 ❌ 불가능 t1[0] = 5 오류 TypeError 발생
요소 삭제 ❌ 불가능 del t1[0] 오류 TypeError 발생
슬라이싱 재할당 ❌ 불가능 t1[1:] = (9, 9) 오류
새 튜플 생성 ✅ 가능 t1 = (1, 2, 3); t1 = (9, 2, 3) t1 = (1, 2, 3) ─▶  t1 = (9, 2, 3)

※ 변수는 동일하되, 안의 객체는 변경 가능
튜플 내부의 값(t1[0]=9)은 수정 불가.
즉, 통째로(t1 전체)는 바꿀 수 있지만, 안의 개별 요소는 바꿀 수 없다.

리스트 vs 튜플 비교표

구분 리스트(list) 튜플(tuple)
기호 [ ] ( )
수정/삭제 가능 (mutable) 불가능 (immutable)
속도 느림 (가변형) 빠름 (고정형)
활용 예 변경이 많은 데이터 변경이 없는 데이터 (예: 좌표, 고정값)

 


와 기초쌓기가 쉽지 않다.

양이 방대하군..

나머지는 내일 해야겠다.