Python

[Python] 파이썬 자료형 총정리(정수, 소수, 실수, 딕셔너리, 불린, 집합, 문자열, 리스트, 튜플)

Let it out 2024. 2. 6. 16:06

변수란?

변수는 변하는 수를 말한다.
 
예를 들어 아래처럼 a라는 변수를 선언하면 a = 5가 된다.
a = 5
 

 

a에다가 2를 더하면, a = 7 이 된다.

 

이처럼 값이 언제든 변할 수 있는 a를 변수라고 부른다.

a = a + 2 #a = 5 + 2
 
 
 
 

자료형이란?

데이터를 구분할 수 있도록 타입을 나눈 것이 자료형이다.

 

아래처럼 a라는 변수이름은 같지만 int, double, string처럼 변수 앞에 자료형을 붙여

 

정수, 실수, 문자열 등 구분을 하는데 사용한다.

 

아래는 C++ 기준이며, 파이썬은 자료형을 붙이지 않는다.

int a; //정수
double a; //실수
string a; //문자열
 
 

정적 타입 언어 vs 동적 타입 언어

변수 선언 시 자료형을 선언해야 하면 정적 타입 언어,
 
자료형을 선언하지 않아도 되면 동적 타입 언어다.
 
파이썬은 자료형을 적지않는 동적 타입 언어다.
 
예를 들어보자.
 
 
 
- 정적 타입 언어
 
C언어나 C++ 에서는 변수를 선언 할 때 아래처럼 자료형을 같이 적어 줘야한다.
int a = 5;
float b = 4.5;
 
 
 

- 동적 타입 언어

 
하지만 파이썬에서는 자료형을 적지 않는다.
a = 5
b = 4.5
 
 
동적 타입 언어 장점 : 자료형을 안적는 만큼 코딩 시간 단축.
 
동적 타입 언어 단점 : 실행 도중 예상치 못한 Type Error가 발생 할 수 있음.
 
 

 

파이썬 자료형 종류

 

아래 그림은 파이썬의 대표적인 자료형들을 나타내는 마인드 맵이다.

 

일단 외울 필요 없이 대충 훑어보고 넘어가면 된다.

 
 
아래 부터는 자료형에 대해 순서대로 설명한다.
 
그냥 한번 쭉 읽어보면서 이해가 안가는 부분이 생기면 직접 코딩해 보는 방식을 추천한다.
 
예제는 복붙해서 넣으면 실행된다.

 


1. 숫자형

숫자형에는 정수, 실수, 복소수 3개가 대표적이며 그 외 8진수, 16진수 등이 있다.
 
기본이자 가장 많이 사용되는 자료형이다.

 

정수형(Integer)

단어 그대로 정수를 말한다. 양의 정수, 음의 정수, 0 까지 정수라면 모두 가능하다.
a = 100
a = 0 
a = - 130
 
 

실수형(Floating point)

소수점이 있는 숫자를 말한다. 마찬 가지로 양, 음 다 된다.
a = 3.14
a = -3.14
 
 

복소수(Complex)

실수와 허수 요소를 가진 숫자를 말한다.
a = 3 + 4j
 
 

8진수(Octal)

8진수를 표현하려면 123 라는 8진수 앞에 숫자 0 + 소문자 o숫자 0 + 대문자O를 붙이면 된다.
아래는 8진수 132를 10진수로 출력하는 예제다.
print 는 변수나 문자를 출력하는 함수다.
a = 0o132
print(a)
결과 : 90
 
 
 

16진수(Hexadecimal)

16진수를 표현하려면 1f라는 16진수 앞에 0x(숫자 0 + 소문자 x)를 붙이면 된다.
아래는 16진수 1f를 10진수로 출력하는 예제다.
a = 0x1f
print(a)
결과 : 31
 
 

 

- Tip
 
8진수 -> 2진수 변환
 
2진수 -> 10진수 변환
 
16진수 -> 10진수 변환
 
각각의 진수끼리 변환하는 방법에 대해 공부하는 것을 추천한다.
 

 


2. 딕셔너리(Dictionary)

Key 와 Value를 한쌍으로 가지는 자료형을 딕셔너리라고 한다.
 
예를 들어 Key = Baseball, Value = 야구 일때
 
Baseball 이라는 Key로 야구라는 Value의 값을 얻을 수가 있다.
 
즉 수 많은 데이터가 있을 때 순차적으로 검색하는 것이 아닌,
 
Baseball 이라는 단어만 검색하여 야구라는 값을 얻어 낼 수 있다. 
 

딕셔너리의 기본 모습

딕셔너리 = {Key1:Value1, Key2:Value2}
 
 

딕셔너리 만들고 Value 값 출력하기

Key 값 name, age, height에 해당되는 Value는 각각 Nick, 10, 130 이다.

딕셔너리를 만들고 출력 해보면 다음과 같은 결과가 나온다.

dictionary = {'name':'Nick', 'age':10, "height":130}

print(dictionary['name'])
print(dictionary['age'])
print(dictionary['height'])
결과 : 
Nick
10
130

 

 

 

 

딕셔너리 출력해 보기

딕셔너리 자체를 출력 하면 각각의 Value와 Key 값 확인이 가능하다.
dictionary = {'name':'Nick', 'age':10, "height":130}

print(dictionary)
결과 : {'name': 'Nick', 'age': 10, 'height': 130}
 
 
 

Key를 정수값으로 출력하기

Key 값을 정수로도 선언가능 하다.
예졔는 1 이란 정수를 Key 값으로 선언했다.
dictionary = {1:'Nick'}

print(dictionary[1])
결과 : Nick
 
 
 

Value를 리스트로 출력하기

리스트도 Value에 넣을 수 있다.
[1,2,3,4] 가 리스트다. (리스트는 좀 더 아래에서 배운다.)
dictionary = {'num':[1,2,3,4]}

print(dictionary['num'])
결과 : [1, 2, 3, 4]
 
 

딕셔너리 요소 추가하기

Key 값 3과 Value 값 2를 추가하는 예제다.

dir = {1:1}
dir[3] = 2

print(dir)
결과 : {1: 1, 3: 2}
 

 

 

딕셔너리 요소 삭제하기

Key 값이 1인 요소를 삭제하는 예제다.

dir = {1:1, 2:2}
del dir[1] #Key가 1인 요소 삭제

print(dir)

 

결과 : {2: 2}
 

 

딕셔너리 사용 시 주의점 1

Key 값이 같으면 맨 마지막 인덱스의 Key 빼고는 다 무시된다.
dir = {1:1, 1:2, 1:3} # 1:3 만 나옴

print(dir)
결과 : {1: 3}

 

 
 

딕셔너리 사용 시 주의점 2

Value는 가능하지만 Key 에는 리스트 사용이 불가능하다. 
실행하면 오류가 발생한다.
dir = {[1,2,3]:1}

print(dir)
결과 : Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 1, in <module>
    dir = {[1,2,3]:1}
TypeError: unhashable type: 'list'
 

 

 


 

3. 불린(Boolean)

불(bool) 자료형은 두 가지 값으로만 나타낸다.
 
참이면 True, 거짓이면 False로 나타낸다.
 

불 자료형

불 자료형은 참과 거짓 판단 유무로 사용된다.
a = True
b = False

print(a)
print(b)
결과 : 
True
False
 
 

조건문으로 참, 거짓 판단하기

2가 1보다 크기 때문에 a는 Ture,
1이 2보다 크다는 건 거짓이기에 b에는 False 가 들어간다.
a = 2 > 1
b = 1 > 2

print(a)
print(b)
결과 : 
True
False
 
 

 

4. 집합(Set)

집합 자료형은 집합을 쉽게 처리하기 위해 만든 자료형이다.
 
집합 자료형은 Set키워드를 사용해서 만든다. 

 

 

집합 자료형 사용 방법

s1 은 리스트를 사용하여 집합을 만들었다.
s2는 문자열을 입력해서 집합을 만들었다.
s1 = set([1,2,3])
s2 = set('abc')

print(s1)
print(s2)
결과 : 
{1, 2, 3}
{'a', 'c', 'b'}
 
 

 

 

집합 자료형의 특징

집합 자료형의 특징은 크게 2개가 있다.
 
1. 순서가 없다.
 
2. 중복 값을 허용하지 않는다.
예제에서 s1 은 순서가 없어 결과 값이 뒤죽박죽으로 나온다.
s2 는 순서가 없어 결과 값이 뒤죽박죽이며 중복된 p가 제거 된다.
s1 = set([3,1,4,6])
s2 = set("apple")

print(s1)
print(s2)
결과 :
{1, 3, 4, 6}
{'p', 'e', 'a', 'l'}
 
 
 

인덱싱에 접근하기

집합 자료형의 순서가 없다는 것은 인덱싱 접근을 할 수 없다는 거다.
첫번째 원소에 접근 하려고 하면 아래와 같이 에러가 발생한다.
s1 = set([3,1,4,6])

print(s1[0])
결과 : Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 1, in <module>
    dir = {[1,2,3]:1}
TypeError: unhashable type: 'list'
 
 
그러면 인덱싱 접근이 아예 불가능 할까?
그렇지 않다 순서가 있어 인덱싱 접근이 가능한 리스트, 튜플을 이용하면 된다.
리스트, 튜플에 대한 내용은 좀 더 아래에서 나오는데 일단 그런갑다 하고 보면된다.
 

집합 자료형을 리스트로 변환해서 인덱싱에 접근하기

s1 = set([1,2,3,4])
list1 = list(s1)

print(list1[0])
결과 : 1
 

집합 자료형을 튜플로 변환해서 인덱싱에 접근하기

s1 = set([1,2,3,4])
tuple1 = tuple(s1)

print(tuple1[0])
결과 : 1
 
 

 

 

교집합 구하기

 s1, s2 두 개의 집합 중 같은 값을 구하는 교집합이다.
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 & s2)
결과 : {1, 2}
 
 

합집합 구하기

모든 값을 구하는 합집합이다. 이때 중복된 1,2 는 한개씩만 출력된다.
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 | s2)
결과 : {1, 2, 3, 4, 5, 6}
 
 
 

차집합 구하기

차집합은 두개의 집합에서 중복 되지 않은 값을 구한다.
s1은 s2와 중복되지 않는 1, 2가 나온다.
s2도 s1과 중복되지 않는 5, 6이 나온다.
s1 = set([1,2,3,4])
s2 = set([1,2,5,6])

print(s1 - s2)
print(s2 - s1)
결과 : 
{3, 4} // s1
{5, 6} // s2
 


5. 문자열(String)

"가" 는 하나의 문자다.
"가다나라" 처럼 여러개의 문자가 모이면 문자열 이라고 한다.
 
 
 

문자열 만들기

문자열에 " " 을 감싸주면된다.
 
작은 따옴표, 큰 따옴표 두 개다 결과가 똑같이 나오니 아무거나 사용하면 된다.
print('작은 따옴표 : i am happy')
print("큰 따옴표 : i am happy")
결과 : 
작은 따옴표 : i am happy
큰 따옴표 : i am happy
 
 

변수에 문자열 넣기

a, b 변수에 문자열을 넣을 수 있다.
이때 a,b 변수의 자료형은 문자열이된다.
a = '작은 따옴표 : i am happy'
b = "큰 따옴표 : i am happy"

print(a)
print(b)
결과 : 
작은 따옴표 : i am happy
큰 따옴표 : i am happy
 
 
 

큰 따옴표, 작은따옴표 문자열에 포함시키기

큰 따옴표, 작은 따옴표를 문자열에 포함 시키고 싶을 때는 아래와 같은 방법을 사용한다.
a = '"저는 배고파요" 라고 말했습니다.'
b = "'저는 배고파요' 라고 말했습니다."
c = "\"저는 배고파요\" 라고 말했습니다."
d = "\'저는 배고파요\' 라고 말했습니다."

print(a)
print(b)
print(c)
print(d)
결과 : 
"저는 배고파요" 라고 말했습니다.
'저는 배고파요' 라고 말했습니다.
"저는 배고파요" 라고 말했습니다.
'저는 배고파요' 라고 말했습니다.
 
 
 

문자열 줄 바꾸기(엔터)

문자열의 줄을 바꾸는 방법은 3개가 있다.
1. \n
2.  ''' 내용 '''
3. """ 내용 """
a = "동해물과 백두산이 \n마르고 닳도록"
b = '''하느님이 보우하사
우리나라 만세'''
c = """무궁화 삼천리
화려강산"""

print(a)
print(b)
print(c)
결과 : 
동해물과 백두산이 
마르고 닳도록
 
하느님이 보우하사
우리나라 만세
 
무궁화 삼천리
화려강산
 
 

문자열 합치기

두 개 이상의 문자열을 합칠 수 있다.
a = "My name"
b = "is Nick"

print(a + b)

 

결과 : My nameis Nick
 
 
 

문자열 반복하기(곱하기)

문자열을 곱할 수 있다.
My name 을 10번 곱해서 출력하는 예제다.
a = "My name "

print(a * 10)
결과 :My name My name My name My name My name My name My name My name My name My name 
 
 
 

문자열 인덱싱

문자열 인덱싱은 문자열에 포함된 각각의 문자에 인덱스를 매겨 인덱스를 호출하면 해당하는 뽑아 낼 수 있는 방법이다.
아래 예제를 보면 첫 번째 인덱스인 M을 출력했다.
주의 : 인덱스 시작은 0 부터다.
a = "My name"

print(a[0])
결과 : M
 
 
이번에는 a[2] 즉 세 번째 문자를 가져온다. 그런데 아무것도 보이지 않는다.
이유는 My 와 name 사이에는 공백이 있다.
공백도 엄연히 하나의 문자로 처리 되므로 마치 출력이 안된 것 처럼 보이지만 공백이 출력된거다.
a = "My name"

print(a[2])
결과 : 
 
 
-1 음수를 출력하면 맨 마지막 인덱스인 e가 출력 된다. -2 를 넣으면 m이 출력.
a = "My name"

print(a[-1])
결과 : e
 
 
 

문자 슬라이싱

문자 슬라이싱은 인덱스의 문자열들을 뽑아 낼 수 있다.
다음 예제는 첫번째 ~ 5번째 이전까지 인덱스의 값이 출력 된다.
주의 : 5번째 이전까지다. 즉 4번째 문자열 까지만 출력된다.
a = "My name"

print(a[0:4])
결과 : My n
 

 


 

6. 리스트(List)

num = [1,2,3,4,5] 이렇게 숫자나 문자의 집합을 리스트라고 한다.
 
숫자와 문자를 섞어서 하나의 리스트를 만들 수 있으며, 리스트 안에 리스트 작성도 가능하다.
 
아래는 여러 모양의 리스트다.
num = []
num = [1, 2, 3, 4]
num = ['a', 'b', 'c']
num = [1, 2, 'a', 'c']
num = [1, [2, 'a']]
 
 

리스트 값 확인하기

리스트를 만들고 리스트 값의 모든 요소 값을 확인하는 예제다.
num = [1,2,3,4]

print(num)
결과 : [1, 2, 3, 4]
 
 
 

리스트 요소 값 출력하기

첫 번째와 두 번째 인덱스, 마지막 인덱스를 출력하는 예제다.
num[-1]처럼 리스트 요소 값에 마이너스가 들어가면 인덱스 마지막이 출력된다.
num = [1,2,3,4]

print("1번째 = ", num[0])
print("2번째 = ", num[1])
print("4번째 = ", num[-1])
결과 : 
1번째 =  1
2번째 =  2
4번째 =  4
 
 

리스트 요소 값 더하기

첫 번째 인덱스 1과 두 번째 인덱스 2를 더하는 예제다.
num = [1,2,3,4]

print("sum : ", num[0] + num [1])
결과 : sum :  3
 
 
 

리스트 안에 리스트 값 출력하기

리스트 안에 리스트를 요소로 넣고 출력하는 예제다.
num = [1,2,[3,4,5,6]]

print("3번째 = ", num[2])
결과 : 3번째 =  [3, 4, 5, 6]
 
 
 

리스트 안에 리스트의 요소값 출력하기

[1,2,[3,4,5,6]] 라는 리스트의 3번째 인덱스인 [3,4,5,6]리스트의 2번째 인덱스 4를 출력하는 예제다.
따라서 num[2][1]이 된다.
num = [1,2,[3,4,5,6]]

print(num[2][1])
결과 : 4
 
 
 

리스트 슬라이싱 하기

리스트의 원하는 요소 값들만 잘라서 가져오는 방법이 슬라이싱이다.
여기서 주의 할 점은 [0:3]은 1번째부터 4번째 전까지 즉 3번째 까지만 가져온다는 뜻이다.
따라서 1,2,3 번째 인덱스인 1,2,3이 출력 된다.
num = [1,2,3,4,5,6]

print(num[0:3])
결과 : [1, 2, 3]
 
 
 

2개 이상의 리스트 더하기

예제 처럼 여러개의 리스트를 더할 수 있다.
num1 = [1,2,3]
num2 = [4,5,6]
num3 = [7,8,9]

print(num1 + num2 + num3)
[1, 2, 3, 4, 5, 6, 7, 8, 9]
 
 
 

리스트  반복하기(곱하기)

리스트를 곱해서 여러 번 반복이 가능하다.
num1 = [1,2,3]

print(num1 * 5)
결과 : [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3]
 
 

 

7. 튜플(Tuple)

튜플리스트는 유사하지만 다른 점이 있다.
 
1. 리스트는 [ ]로 요소를 감싸지만 튜플은 ( )로 감싼다.
2. 리스트는 값 생성, 수정, 삭제가 가능하지만 튜플은 불가능하다.
3. 리스트는 하나의 요소만 가질 때 ,(콤마)를 작성하지 않아도 되지만, 튜플은 t = (1, ) 처럼 하나의 요소만을 가질 때는 반드시 ,(콤마)를 작성해야한다.
4. 리스트는 [] 괄호가 필수지만 튜플은 t = 1,2,3,4 처럼 괄호를 생략해도 된다.
 
 
튜플에는 여러 모양이 있다.
t = ()
t = (1, 2, 3, 4)
t = (1,)
t = 1, 2, 3, 4
t = ('a', 'b', (1, 'd'))
 
 

튜플 만들기

기본적인 튜플 요소 값 만들기다.
t = (1,2,3,4)

print(t)
결과 : (1, 2, 3, 4)
 
 

튜플 요소값은 삭제가 불가능하다.

del 함수로 요소를 지우려고 하면 오류가 발생한다.
리스트는 요소 값 삭제가 가능하지만 튜플은 불가능하다.
t = (1,2,3,4)
del t[0]

print(t)
결과 : 
Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 2, in <module>
    t[0] = 5
TypeError: 'tuple' object does not support item assignment
 
 

튜플은 요소 값 변경이 불가능하다.

요소 값을 변경하려고 하면 에러가 발생한다.
리스트는 요소 값 변경이 가능하지만 튜플은 불가능하다.
t = (1,2,3,4)
t[0] = 5

print(t)
결과 :
Traceback (most recent call last):
  File "C:\Users\skek1\PycharmProjects\pythonProject1\test.py", line 2, in <module>
    t[0] = 5
TypeError: 'tuple' object does not support item assignment
 
 

튜플 인덱싱하기

리스트 처럼 튜플도 인덱싱이 가능하다.
2 번째 요소인 2가 출력된다.
t = (1,2,3,4)

print(t[1])
결과 : 2
 
 

슬라이싱 하기

특정 요소들만 잘라서 가져오는 방법이 슬라이싱이다.
t = (1,2,3,4)

print("첫번째 부터 끝까지  = ", t[0:])
print("두번째 부터 4번째 까지 = ", t[1:4])
결과 : 
첫번째 부터 끝까지  =  (1, 2, 3, 4)
두번째 부터 4번째 까지 =  (2, 3, 4)
 
 

튜플 더하기

두 개 이상의 튜플을 더할 수 있다.
t1 = (1,2,3,4)
t2 = (5,6,7,8)

print(t1 + t2)
결과 : (1, 2, 3, 4, 5, 6, 7, 8)
 
 

튜플 반복하기(곱하기)

튜플을 여러 번 반복 할 수 있다.
t = (1,2,3,4)

print(t * 3)
결과 : (1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4)
 
 

마치며

처음 코딩에 발을 내딛는 사람에게는 문법이 이해 되지 않아 어려울 수 있다. 
 
하지만 단지 익숙하지 않아서 어렵게 느껴지는거다.
 
구구단 외우는 것처럼 반복해서 공부하다보면 언젠가는 익숙해 지며 이해가 쏙쏙 될거다.
 
미래에 당신이 어엿한 개발자가 됐을 때  문법 공부하던 과거의 자신을 떠올린다면 귀엽게만 느껴질거다.
 
프로그래밍 문법은 기초이자, 개발자에겐 구구단 처럼 가장 쉬운 것이니까.
 
그러니 포기하지 말고 끝까지 목표를 향해 달려나가길 바란다.
반응형