1. Python - 자료형(Data type) 종류(스칼라, 컨테이너, 시퀀스) 및 주로 사용되는 자료형 (수치, 불, 군집 자료형)
파이썬은 다른 프로그래밍 언어인 C, Java와는 다르게
변수를 선언할 때, 자료형을 명시적으로 선언하지 않는다. 즉, 변수를 미리 지정하지 않아도 된다.
이러한 특징을 가진 프로그래밍 언어를 '동적 타입 언어(Dynamically typed language)'라 한다.
# 정적 타입 언어(Statically typed language) & 동적 타입 언어(Dynamically typed language)
정적 타입 언어(Statically typed language) | 동적 타입 언어(Dynamically typed language) |
컴파일(Compile) 시, 변수의 타입이 결정되는 언어 즉, String name = "홍길동" 처럼 선언해주어야 함. [ 컴파일러(Compiler)로 번역 ] |
런타임 시, (실행 시) 타입이 결정되는 언어 즉, name = "홍길동"처럼 타입 지정이 불필요함. [ 인터프리터(Interpreter)로 번역 ] |
이러한 특징을 가진 파이썬은,
실행을 시켜야만 자료형의 오류를 검출할 수 있다는 단점이 있지만,
코드를 구현하기 위해 자료형을 지정할 필요가 없어 유연하고 빠르게 코딩할 수 있다는 장점이 있습니다.
# 파이썬의 자료형
파이썬은 다양한 자료형을 제공하며, 각각의 자료형은 데이터의 종류와 특성에 따라 구분된다.
파이썬의 주요 자료형 | ||
스칼라(Scalar) 자료형 | 컨테이너(Container) 자료형 | 시퀀스(Sequence) 자료형 |
- 숫자나 참/거짓 등 하나의 값을 담는 자료형 - 정수(int), 실수(Float), 문자열(str), None, Boolean이 있다. |
- 여러 개의 자료를 원소로 묶어 하나의 변수에 담는 형태의 자료형 - 리스트(list), 튜플(tuple), 집합(set), 딕셔너리(dict) |
스칼라 / 컨테이너 자료형들 중, 구성원소들 사이에 순서를 매겨 번호대로 원소를 호출할 수 있는 형태의 자료형. - 문자열(str), 리스트(list), 튜플(tuple) |
위의 표는 파이썬의 자료형을 데이터의 특성과 용도에 따라 구분한 것이다.
파이썬은 사용하고자 하는 데이터에 따라 유연하게 활용할 수 있으며, 아래 이미지는 자주 사용하는 파이썬의 자료형을 정리한 것이다.
파이썬의 자료형은 크게 수치 / 불 / 군집 자료형으로 구분할 수 있다.
- 수치 자료형 : int, float, complex
- 불 자료형 : boolean
- 군집 자료형 : str, list, tuple, set, dictionary(dict)
위 자료형에 대해 설명하고자 한다.
# 수치 자료형(Numeric)
숫자형, 수치 자료형은 산술 연산 및 다양한 연산을 수행할 수 있으며,
- 정수 (Integer) - 양수, 음수 혹은 0
- 실수 (Float) - 소수점이 표현되는 숫자
- 복소수 (Complex) - 실수와 허수 요소를 가진 숫자
위의 3가지 자료형을 가진다.
i = 10 #int
f = 3.14 #float
c = 21 + 3j #complex
# type() 함수를 통해 자료형을 확인한다.
print(type(i)) # 결과 : <class 'int'>
print(type(f)) # 결과 : <class 'float'>
print(type(c)) # 결과 : <class 'complex'>
# 불 자료형(Boolean)
불리언은 True 또는 False인 두 가지 값을 갖는 자료형으로, 진실(True) 혹은 거짓(False)을 판별할 때 사용한다.
이러한 특징으로 조건을 판단해야할 때 많이 사용합니다.
( 조건문(if문..)이나 반복문(While문)에서 흐름을 제어하고자 할때 사용. )
t = True
f = False
# true 나 false이 아닌, 값을 넣을 경우 비교 결과를 받아옵니다.
result = 5 > 10 # False
# 군집 자료형 중, 문자열(Str) - " "
군집 자료형은 데이터를 그룹화하여 관리하는 자료형으로, 동일한 유형의 요소로 이루어진 요소의 모음이다.
문자열(str)은 여러 개의 문자로 구성되어 있는 시퀀스(Sequence) 자료형으로,
문자 하나가 아닌 ( ex> 'ㄱ', 'A' ...) 단어, 문장 등의 문자열을 저장할 수 있다.
이런 문자열 자료형은,
순서가 있고(index 기반으로 접근한다.), 중복이 허용(Duplication)되며, 수정이 불가(Immutable)한 특성을 가지고 있다.
s1 = "Hello World!" # str
s2 = "Hello" + "World!"
print(s1) # 결과 : Hello World!
print(s2) # 결과 : HelloWorld!
print(len(s1)) # 결과 : 12 (len() 함수는 길이를 출력합니다.)
print(s1[2]) # 결과 : l (s1의 2번째 인덱스 값을 출력하라는 뜻. 이때, 인덱스는 0부터 시작!)
print(s1[2:5]) # 결과 : llo (s1의 2이상 5미만 인덱스 값을 출력)
# 군집 자료형 중, 리스트(List) - [ ]
리스트(List)는 다수의(여러 개) 데이터를 저장하는 자료형이다.
해당 리스트에 포함된 데이터는 '요소(Element)'라 부른다.
이런 리스트 자료형은,
순서가 있고(index 기반 접근), 중복을 허용하며(Duplication), 수정이 가능한(Mutable) 특성을 가지고 있다.
l = [1, 2, 3, 4, 5] #list
print(type(l)) # 결과 : <class 'list'>
# 값 추가하기
l.append(6) # [1, 2, 3, 4, 5, 6]
l.append(2) # [1, 2, 3, 4, 5, 6, 2]
# 값 제거하기
l.remove(1) # [2, 3, 4, 5, 6, 2]
# 값 정렬하기
l.sort() # [2, 2, 3, 4, 5, 6]
# 리스트에 연산
# (1) +
l = l + [7, 8] # [2, 2, 3, 4, 5, 6, 7, 8]
# (2) *
l = l * 2 # [ 2, 2, 3, 4, 5, 6, 7, 8, 2, 2, 3, 4, 5, 6, 7, 8]
# 군집 자료형 중, tuple - ( )
튜플(Tuple)은 리스트와 매우 유사하다.
이러한 튜플은,
순서가 있고 (index 기반 접근), 중복을 허용하며, 수정이 불가한 특성을 가진다.
특성 자체는 str과 동일하며, 리스트와는 수정 여부의 차이만이 다르다.
튜플 자료형은 속도가 빠르다는 장점이 있어, 파이썬 native 함수에 많이 사용되고 있다.
t = ( 1, 2, 3, 4, 5, 1, 2)
print(t.count(1)) # 결과 : 2 (count() 함수는 인자의 값이 몇개 있는지 확인하는 함수이다.)
print(t.index(5)) # 결과 : 4 (index() 함수는 인자의 값이 어느 인덱스에 있는지 출력하는 함수이다.)
* 수정이 불가하기에 append, remove, sort 등의 함수를 사용할 수 없다.
# 군집 자료형 중, 집합(Set) - { }
집합(Set) 자료형은 중복된 값이 없는 유일한 값의 모음으로, 수학의 집합과 비슷한 개념이다.
이러한 집합은,
순서가 없고, 중복이 불가능하며, 수정이 가능하다는 특징이 있다.
s = { 1, 2, 3, 4, 5 }
# 값 추가
s.add(6) # {1, 2, 3, 4, 5, 6}
# 값 제거
s.remove(3) # {1, 2, 4, 5, 6}
# 값 확인
print(4 in s) # 결과 : True ( in을 통해 집합 안에 4가 있는지 확인합니다. )
# 군집 자료형 중, 사전(Dictionary) - { }, Key-Value
딕셔너리 자료형은 키(Key) - 값(Value)쌍으로 구성되어,
키는 값을 식별하는 역할을 해, 주어진 키를 통해 해당하는 값을 찾을 수 있다. 이때, 키 값은 유일해야 하며 딕셔너리에는 순서가 중요치 않다. 즉, 인덱스를 사용하지 않는다는 것이다. ( 대신 key 값을 넣는다. )
d = {1:10, 2:20, 3:30, 4:40, 5:50} # dict
print(type(d)) # 결과 : <class 'dict'>
# 값 추가
d[6] = 60 # key : 6 Value : 60
print(d) # 결과 : {1: 10, 2: 20, 3: 30, 4: 40, 5: 50, 6: 60}
print(d[1]) # 결과 : 10 (키 값이 1인 value를 구하는 것입니다.)
# 값 제거
del d[2] # {1: 10, 3: 30, 4: 40, 5: 50, 6: 60}