TIL#Python Data Types(자료형) 1편

0
post-thumbnail

많은 프로그래밍 언어들이 변수들을 선언하기 앞어서 각자의 data type을 가지고 있다.

프론트 개발자들이 쓰는 언어인 JS(Javascript)에서는 문법의 대부분이 Java와 C,C++부터 차용하고 있고 기본적으로 6개 타입과 Object(객체)타입을 가지고 있다. 기본적으로는 Boolean, Null, Undefined,Number,String,Symbol이 있다.

백엔드 개발자는 많은 언어 옵션 선택사항이 있으며 대세는 파이썬으로 가는 만큼 파이썬 백엔드 개발자로서 파이썬의 개념에 대해 하나씩 알아보자!

그럼 파이썬의 자료형에 대해 알아보자!

자료형 체계(type system) 동적? 정적?

먼저 동적 타입 언어(Dynamically typed languages)에는 Python, JavaScript, Ruby ,Scala 등이 있으며 정적 타입 언어(Statically typed language))에는 C, C#,C++, Java,Go, Objective-c 등의 언어가 있다.

정적 타입 언어(Statically typed language)

언어의 늬앙스에서 알 수 있듯이 정적 언어는 type(자료형)이 고정된 언어로 컴파일 하는 과정에서 자료형이 결정된다. 컴파일 시 타입에 대한 정보를 결정하기 때문에 속도가 빠르고, 타입 에러로 인한 에러를 초기에 발견 가능하므로 안정성 측면이 높으며 실행속도가 동적언어에 비해 빠르다고 할 수 있다. 그러나, 매번 코드 작성시 변수형에 대해 결정해줘야하는 번거러움이 있다. 특히 , C언어로 예를 들어도 char, unsigned char, short(int), long int 등으로 잘 구분해줘야 하기 때문에 입문자에게 어려운 점이 있으며 자료형을 잘못 지정해줬을 경우 런타임 전 컴파일 전에서부터 에러가 발생하는 특징이 있다.

int num1 = 10;
int num2 = 5;
float num3;
num3 = num1 / num2;

이 결과는? 아마 에러가 날 것이다.,변수 선언시 타입을 앞에 명시 해야하는 게 정적타입에 속한다.

동적타입 언어(Dynamically typed language)

우리는 다이나믹하다 라는 말을 쓰곤 한다. 사전적으로는 역동적이다, 활발하다 라고 정의하는데, 언어의 타입에서 알 수 있듯이 동적언어는 자료형을 일일히 정해주지 않고 컴파일 시가 아닌 Runtime 시 결정되는 언어로 런타임까지 자료형 타입에 대해 결정을 끌고 갈 수 있기 때문에 유연성이 높으며 빠르게 코드가 작성하다는 장점이 있다.

즉, 실행까지 타입에 대한 결정을 유예 할 수 있기 때문에 자료형 선택의 폭을 실행전까지 넓힐 수 있고 유연하다. 그래서 흔히 파이썬이 쉬우니 한번 배워봐 라고 말하는 것도 파이썬이 가지고 있는 많은 장점 중에서도 이러한 동적타입의 언어의 장점때문에 그런 것 같다. 또한, 이러한 이유로 파이썬이 아마 스타트업뿐 아니라 데이터 쪽에서 많이 활용되는 중의 이유 중 하나가 아닐 까 싶다.

접근성 측면에서 입문자들에게는 자료형의 개념을 덜어 줄 수 있고,

그렇다면, 장점만 있을까? 동적타입언어는 정적타입언어와 바대로 실행 도중 변수에 예상치 못한 타입을 통한 에러가 발생할 수 있다. 그래서 신중한 코딩이 요구 된다고 할 수 있다.

name = "당신의 이름은?"
question = "뭘까요?"
pie = 3.14
i_am_int = 3 

print(type(name))
print(type(question))
print(type(pie))
print(type(i_am_int))

![스크린샷 2020-11-23 오전 1.33.32](/Users/byul/Desktop/스크린샷 2020-11-23 오전 1.33.32.png)

Python Data types

파이썬의 자료형은 크게 7 가지로 나눠 볼 수 있는데 , 숫자형(Number) ,문자열(String),리스트(List),딕셔너리(Dictionary),튜플(Tuple),불(bool),집합 자료형(Set)이다.

1. 숫자형(Numbers)

숫자형은 숫자 형태로 이루어진 자료형으로 우리가 잘 알고 있는 정수형(Integer), 실수형(floating-point), 8진수 16진수 가 있다.

정수형은 우리가 잘 아는 음수(negative number)나 양수(Positive Number)가 있고, 실수형은 소수점이 포함된 숫자를 말한다.

8진수(Octal)와 16진수(Hexadecimal)는 파이썬에서는 잘 사용하지 않으니 참고용으로 알고 가며 자료형은 아래의 예시를 참조하자.

a = 100  양수
b = -30  음수

c = 3.14 실수
d = -12.0 

e = 0o152  (8진수)
f = 0x8ff   (16진수)

주의 해야할 점은 6/2 의 결과는 3으로 이거의 타입은 정수형일거 같으나 실질적인 타입은 float(실수형) 으로 나온다. 이러한 것을 방지하기 위해 파이썬에서는 정수나누기 방법이 있는데 이는 연산자의 활용에서 알아보자. ( 참고: // 사용 )

2. 문자열(String)

문자열 자료형이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다.

문자열의 선언과 사용은 큰따옴표(Double quotation)(")로 양쪽 둘러싸기,작은따옴표(Single quotation)(')로 양쪽 둘러싸기**

작은따옴표 3개를 연속(''')으로 써서 양쪽 둘러싸기,. 큰따옴표 3개를 연속(""")으로 써서 양쪽 둘러싸기총 4가지 이다.

"Hello world"
'python is easy'
"""But, indentation is so irritating"""
'''But, it will be easy if you get used to it'''

예제에서 4번째의 문장을 두 줄로 나누고 싶고 긴 문장열의 변수를 선언하고 대입하려면 어떻게 해야 할까? 한 줄을 나누기 위해서는 이스케이프 코드 \n 삽입하는 방법과 연속된 작은따옴표 3개(''') 또는 큰따옴표 3개(""") 사용하는 것이다.

Pyhon_grammar = """
But, it will be easy
if you get used to it
"""

python_grammar_point = "Indentation\nBut, indendtation is so irritating"

![image-20201123020129707](/Users/byul/Library/Application Support/typora-user-images/image-20201123020129707.png)

문자열 연산하기

1. 문자열 더하기(Cocatenation)
head = "Python"
middle = "Backend"
last = "Develper"
i_am = head +" "+ middle +" " + last
>> Python Backend Developer
2. 문자열 곱하기
didi = "d"
didi_chicken = didi * 2
>> dd
3. 문자열 길이 구하기
i_am = "BackendDeveloper"
len(i_am) = 16

3. 리스트 자료형(List)

Python에서는 숫자와 문자만으로의 프로그래밍은 어렵기에 리스트 자료형이 있다.

리스트(List)를 통해 여러개의 데이터를 한 곳에 저장할 있고, List는 대괄호로 감싸여져 있으며, 데이터 요소와 요소는 쉼표로 구분한다.

리스트명 = [ element1, element 2, element3,....]

리스트의 요소(element)로는 숫자, 문자, 리스트가 들어갈 수 있고, 리스트 안에 리스트가 들어간 것을 다차원 리스트(Nest one List within Another List)라 부른다. 빈 리스트는

변수명 = list()로 선언 할 수 있다.

vaitamin_b = ["B1","B2","B3","B5","B6","B12","B7","B9"]
valentine = ["2월 14일", 2, 14]
victory = ["승리",["승리","빅뱅"],30]

리스트 인덱싱(list index)

인덱스를 사용해서 리스트의 데이터에 접근할 수 있습니다.리스트의 인덱스는 '[0]' 와 같은 브라켓 노테이션을 통해 호출할 수 있습니다.

a라는 리스트가 있다면 a[n] a 리스트의 n 번째 요소 값을 뜻한다.

a = [1,2,[3,4],5]
a[0] = 1
a[2] = [3,4]
a[-1] = 5
multiple_list = [
  [1,2,3],
  [4,5,6],
  [7,8,9],
  [[10,11,12], 13, 14]
];
print(multiple_list[3]) >> [[10,11,12],13,14]
print(multiple_list[3][0])  >> [10,11,12]
print(multiple_list[3][0][1]) >> 11

리스트 슬라이싱(list slicing)

slicin파이썬에서는 리스트의 일부분을 따로 copy 할 수 있습니다. 슬라이싱은 ‘나눈다’는 뜻으로 문자열을 복사하여 나누는 것이라고 할 수 있습니다.

인덱싱이 문자열 각 요소에 접근하는 거라면 슬라이싱은 쪼갠다고 생각하면 된다.

슬라이싱 방법(Slicing step)은 list_name[start : stop] 로 하면 된다.

List를 slicing 할때 start index를 빈칸으로 남겨두면 해당 list의 첫 요소 부터 시작하며, 슬라이싱의 결과는 start부터 stop-1까지 이다.

a = [1,2,3,[4,5,6],7,8]
a[2:5] >> [3,[4,5,6],7]
a[3][:2] >> [4,5]
a[:3] >> [1,2,3]

slicing에는 slicing step방법도 있는데, list_name[start : stop : step] 이렇게 사용하기도 한다. Step은 그 값만큼 건너뛰어 가져오는 기능 으로서 아래를 참조하자.

a = [1,2,3,[4,5,6],7,8]
print(a[1:6])  >> [2, 3, [4, 5, 6], 7, 8]
print(a[1:6:2]) >> [2, [4, 5, 6], 8]

기억할 점: 슬라이싱은 오리지널 list를 수정하는 것이 아닌 copy하여 새로운 list를 만들어 낸다는 것이다.

리스트 더하기, 수정, 삭제

리스트는 (+)연산자를 통해서 문자열 합치듯이 합칠 수 있으며, (*)asterisk 를 통해서 반복하여 새로운 리스트를 만들 수도 있다. 리스트의 길이는 len(list)를 통해 구 할 수 있다.

리스트의 수정은 list[리스트 요소 순서] = 바꿀 값 을 통해 가능하며, 리스트 요소의 삭제는

del 함수를 통해 리스트에서 요소를 삭제 할 수 있다. del list[n] 는 list에서 n번째의 요소값을 삭제한다. 혹은 슬라이싱 기법을 적용하여 여러개 지울 수도 있다.

a = [1,2,3,[4,5,6],7,8]
a[2]= 4  >> a = [1,2,4,[4,5,6],7,8]
del a[1] >> a= [1, 3, [4, 5, 6], 7, 8]
del a[2:] >> a = [1, 2]

리스트 함수

리스트 요소 추가(append) , 리스트 정렬(sort),리스트 뒤집기(reverse),위치반환(index),요소 삽입(insert), 요소제거(remove) ,요소 끄집어 내기(pop), 리스트의 포함된 요소 갯수 세기(count), 리스트 확장(extend) 이 있다.


요소추가(append) 는 리스트의 맨 마지막에 요소를 추가 하는 함수이다.

listname.append(element) 방식으로 사용한다.

추가하고자 하는 element가 한개 이상일때는 append 대신에 + 를 사용하여 리스트 끼리 합칠 수 있다.

list1 = [1, 2, 3, 4]
list2 = [5, 6, 7]
list3 = list1 + list2
print(list3) > [1, 2, 3, 4, 5, 6, 7]
list3.append(8) >> [1, 2, 3, 4, 5, 6, 7, 8]

sort함수는 리스트의 요소를 순서대로 정렬 해주고, reverse는 현재의 리스트 순서 그 자체로 거꾸로 뒤집어준다.

index는 리스트의 요소의 위치 값을 반환 시켜준다. listname.Index(x)로 사용하며 리스트의 x값이 있으면 x의 위치값을 돌려준다.

list1 = [1, 2, 3, 4]
list1.index(3) >> 

Insert함수는 삽입해주는 기능으로 insert(a,b)는 a번째의 위치에 b를 삽입하는 함수이다. remove함수는 del의 기능은 동일하다.

a = [1,2,3] 
a.insert(0,4) >> [4,1,2,3]
b = [1,2,3,4,1,2,3]
b.remove(3)  
print(b) >>[1, 2, 4, 1, 2, 3]

Pop 함수는 pop()으로 사용시 맨 마지막 요소를 돌려주고 그 요소는 삭제하며, pop(x)로 사용시 리스트의 x번째 요소를 돌려주고 그 요소는 삭제한다.

a = [1,2,3,4,5]
a.pop() >>> 5
print(a) >> [1,2,3,4]
a.pop(2) >> 3
print(a) >>[1,2,4]

count함수는 count(x)는 리스트안에 x가 몇개 있는지 조사하겨 그 개수를 반환하고 extend함수는 a.extend(x)이며 x는 리스트만 받으며 a의 리스트에 x리스트를 확장해주며 기능은 a += [x]와 동일하다.

a = [1,2,3,4,1,2,3,1,1]
a.count(1) >> 4
profile
문과생 개발자되다

0개의 댓글