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) |
| 속도 | 느림 (가변형) | 빠름 (고정형) |
| 활용 예 | 변경이 많은 데이터 | 변경이 없는 데이터 (예: 좌표, 고정값) |
와 기초쌓기가 쉽지 않다.
양이 방대하군..
나머지는 내일 해야겠다.
'미래 먹거리를 위하여' 카테고리의 다른 글
| [파이썬 정복하기] 점프 투 파이썬 3장 – 프로그램의 구조를 쌓는다! 제어문 (책 없이 시작하기) (0) | 2025.10.20 |
|---|---|
| [파이썬 정복하기] 점프 투 파이썬 2장 – 파이썬 프로그래밍의 기초, 자료형 ② (책 없이 시작하기) (0) | 2025.10.19 |
| [파이썬 정복하기] 점프 투 파이썬 1장 – 파이썬(Python)이란 무엇인가? (책 없이 시작하기) (1) | 2025.10.17 |
| [인공지능] LG 'Radio Optimism 캠페인' - 160자로 만든 나만의 음악 (6) | 2025.09.01 |
| 갤럭시 버즈를 맥북에? 이렇게 연결합니다. (6) | 2025.08.21 |



