ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] 데이터 타입
    프로그래밍/Python 2024. 8. 6. 02:27

    변수 (Variable) : 메모리에 데이터를 저장하기 위한 공간을 가리키는 말로 실제 물리적인 메모리 주소공간을 가리킴

    => 사용자는 변수의 이름으로 데이터를 인식하고, 컴퓨터는 변수의 주소로 데이터를 인식함

     

    = (assignment operator) : 데이터 "할당" 연산자

    # 변수 a에 10이라는 정수 데이터 할당(assign)
    a = 10
    
    # 파이썬에서 a라는 변수를 인식하고 있는 identifier 확인
    id(a)

     

     

    숫자 데이터 (Numeric Data Types)

    정수, 실수, 복소수, 2진수, 8진수, 16진수를 포함하며 대부분의 연산을 그대로 지원함

    파이썬은 숫자의 표현 범위가 무한대

     

    정수형 (Integer)

    a = 10

     

    실수형 (Floating point)

    c = 3.14
    # 1.34 x 10^6을 의미함
    e = 1.34E6		# 할당된 값 : 1340000.0
    e2 = 1.34e-3	# 할당된 값 : 0.00134
    
    0.00000001		# 출력값 : 1e-07

     

    사칙연산

    모두 지원하지만 그 값이 다르게 나오는 경우도 있음

    3.14 - 4	# -0.86이 아니라 -0.8599999999999999 으로 출력됨
    # numerical error 발생 -> 파이썬이 numerical error가 많이 생기는 언어이기 때문에
    # numpy 같은 라이브러리를 이용함

     

    특수연산

    a = 5
    b = 2
    a ** b	# a를 b번 곱한 것 = a^b	결과값 : 25
    a // b	# a를 b로 나눈 몫	결과값 : 2
    a % b	# a를 b로 나눈 나머지	결과값 : 1

     

     

    문자열 (String)

    파이썬에서 다룰 수 있는 문자열의 크기는 제한이 없음

    '(작은 따옴표)와 "(큰 따옴표)로 문자열 나타냄

    # string 변수 표현하는 두가지 방법
    s1 = 'hello'
    s2 = "hello"

    컴퓨터는 문자(character)를 encoding(ASCII, utf-8, cp949 등)하여 숫자로 표현함

    int('A')	# 결과값 : 65
    int('a')	# 결과값 : 97

    전세계적으로 웹에서 사용되는 국제 표준은 UTF-8(Universal code character set Transformation Format - 8-bit)

    => a는 1바이트, '가'는 3바이트로 인식함 = 가변 인코딩 방식

     

    문자열 연산

    s1 = 'Hello'
    s2 = 'World'
    s1 + s2		# 결과값 : HelloWorld

     

    문자열 Formatting

    phone = 'iPhone 15 Pro Max'
    usage = 80.3333
    
    # print formatting
    print('%s의 배터리가 %.2f%% 남았습니다.' % (phone, usage))
    
    # str.format
    print('{}의 배터리가 {:.2f}% 남았습니다.'.format(phone, usage))
    
    # f-string
    print(f'{phone}의 배터리가 {usage:.2f}% 남았습니다.')
    
    # 세가지 방법 모두 결과가 같음
    # 결과값 : iPhone 15 Pro Max의 배터리가 80.33% 남았습니다.

     

    문자열 관련 함수

    split() : 문자열 나누기

    s = 'Life is too short.'
    s.split()		# 결과값 : ['Life', 'is', 'too', 'short.']
    # split 함수에 따로 인자를 지정하지 않으면 ' '(스페이스) 기준으로 나눠서 반환
    # split(',') 꼴로 호출 시 ','(쉼표) 기준으로 토큰화됨

     

    replace() : 문자열 바꾸기

    s = 'Life is too short.'
    s = s.replace('Life', 'This Pencil')
    s = s.replace(' ', '')
    # 결과값 : Thispencilistooshort.

     

     

    연속형 데이터 (Sequential Data Types)

    여러개의 데이터를 하나의 변수에 가지고 있는 데이터 타입

    따로 크기 제한은 없지만 사용하는 컴퓨터의 가용 메모리 용량을 생각하면서 사용해야 함

     

    리스트 (List)

    가장 많이 사용되는 연속형 데이터 타입으로 굉장히 유연한 구조를 가지고 있어 대부분의 데이터를 다룰 수 있음

    파이썬에서는 [ ] (대괄호)를 이용하여 표현함

    리스트 원소로 리스트를 넣을 수도 있음

    수정이 자유롭기 때문에 수정하면 안되는 경우에는 사용하면 안됨

    L1 = [1, 2, 3]
    L2 = [1, 'Hi', 3.14, [1, 2, 3]]
    L3 = [[1, 2],		# 2x2 행렬 표현처럼 사용 가능 -> 이런 형태를 2차원 리스트라고 함
    	[3, 4]]
    # L1 출력값 : [1, 2, 3]
    # L2 출력값 : [1, 'Hi', 3.14, [1, 2, 3]]
    # L3 출력값 : [[1, 2], [3, 4]]

     

    인덱싱 (Indexing)

    index를 통해 접근(access)하는 방법

    리스트의 index는 맨 앞부터 0으로 시작하며 1씩 증가함

    파이썬에서는 음수 index도 제공하며 뒤쪽부터 접근할 수 있는 방법임

    L = [1, 2, 3, 4, 5]
    L[0]		# 결과값 : 1
    L[-1]		# 결과값 : 5
    
    # len() : 연속형 데이터의 크기를 반환하는 함수 -> 연속형 데이터를 다룰 때 많이 사용함
    len(L)		# 결과값 : 5
    L[len(L) - 2]	# L[len(L) - 2] = L[5 - 2] = L[3] 이므로 결과값 : 4
    
    # indexing을 이용한 연산
    L[0] + L[1]	# 1 + 2 이므로 결과값 : 3

     

    슬라이싱 (Slicing)

    리스트의 일부만 사용할 때 사용하는 기법

    L = [1, 2, 3, 4, 5]
    
    # L[start:end] : start부터 end 직전까지
    L[0:3]		# index 0부터 2까지 결과값 : [1, 2, 3]
    L[1:-1]		# == L[1:len(L)-1] == L[1:5-1] == L[1:4] 결과값 : [2, 3, 4]
    
    # start, end 값 미지정 시 자동으로 끝 값으로 계산
    L[3:]		# 결과값 : [4, 5]
    L[:3]		# 결과값 : [1, 2, 3]
    
    # L[start:end:step]
    L[0:5:2]	# index 0부터 4까지 간격 2로 결과값 : [1, 3, 5]

     

    리스트 연산

    리스트 더하기

    # concatenation
    L1 = [1, 2, 3]
    L2 = [4, 5]
    L + L2	# 결과값 : [1, 2, 3, 4, 5]

     

    리스트 곱하기

    L1 * 3	# 결과값 : [1, 2, 3, 1, 2, 3, 1, 2, 3]

     

    리스트 수정하기

    L1 = [1, 2, 3, 4, 5]
    L2 = L1		# shallow copy : 주소 가져오는 것
    L2 = L1.copy()	# deep copy : 리스트 내용을 복사하는 것, 주소는 다름
    L2[0] = 7
    L1		# 결과값 : [1, 2, 3, 4, 5]
    L2		# 결과값 : [7, 2, 3, 4, 5]

     

     

    리스트 관련 함수

    L = []
    
    # append() : 리스트 끝에 원소 추가
    L.append(3)		# 결과값 : [3]
    L.append(2)		# 결과값 : [3, 2]
    L.append(1)		# 결과값 : [3, 2, 1]
    
    # insert() : 리스트 중간에 원소 삽입
    L.insert(1, 8)		# index 1 위치에 8 삽입. 결과값 : [3, 8, 2, 1]
    
    # pop() : 지정한 위치 원소 제거. 인자 미지정 시 가장 마지막 위치 원소 제거.
    L.pop(1)		# index 1 위치 원소 제거. 결과값 : [3, 2, 1]
    L.insert(1, 'a')	# index 1 위치에 'a' 삽입. 결과값 : [3, 'a', 2, 1]
    
    # remove() : 지정한 값 가진 원소 제거. 리스트에 동일한 값 여러개 있을 경우 가장 처음에 있는 원소 제거.
    L.remove('a')		# 리스트 상에 있는 'a' 제거. 결과값 : [3, 2, 1]
    
    
    # sort() : 리스트 정렬
    L = [4, 3, 16]
    L.sort()		# L 자체가 정렬됨
    sorted(L)		# L을 정렬한 결과 반환 => L 자체를 정렬하는 것은 아님

     

     

    튜플 (Tuple)

    리스트는 생성 후에 변경이 가능하지만(mutable), 튜플은 생성 후에 변경이 불가능함(immutable)

    • Mutable - List, dict, set
    • Immutable - int, float, string, tuple, frozenset
      • 변경되지 않는 그 자체로 성능적으로 장점임
      • 데이터 수정 자체를 하지 않는 경우 실수를 방지할 수 있는 프로그래밍적 장점이 있음
    t = (1, 2)	# 튜플 생성
    t[0] = 3	# 수정이 불가능하므로 error 발생
    
    # tuple 연산
    t1 = (1, 2)
    t2 = (3, 4)
    t1 + t2		# 튜플 더하기 연산. 결과값 : (1, 2, 3, 4)
    t1 * t2		# 튜플 곱하기 연산은 불가능 하므로 error 발생

     

     

    집합 (Set)

    {} (중괄호) 로 표현함. 단, 사전(Dictionary) 자료형도 {} (중괄호)를 사용하므로 주의해야함

    공집합 생성 시 ""반드시"" set() 으로 생성해야 함. {} (중괄호)로 생성하면 빈 사전이 생성됨

    집합이므로 교집합, 합집합, 차집합 모두 지원함

     

    집합의 특징

    • 집합은 원소의 중복을 허용하지 않음. => 원소의 종류를 나타내기 좋음
    • 집합은 원소의 순서가 존재하지 않음. => 원소의 index가 없음
    s = {1, 2, 3}
    s	# 결과값 : {1, 2, 3}
    type(s)	# 결과값 : set
    
    s[1]	# 집합은 인덱스를 지원하지 않으므로 error 발생

     

    집합의 연산

    s1 = {1, 2, 3, 4, 5}
    s2 = {3, 4, 5, 6, 7}
    
    s1 & s2	# 교집합. 결과값 : {3, 4, 5}
    s1 | s2	# 합집합. 겹치는 원소는 한번만 들어감. 결과값 : {1, 2, 3, 4, 5, 6, 7}
    s1 - s2	# 차집합. 결과값 : {1, 2}

     

    집합을 활용하는 예시

    L1 = [1, 1, 2, 2, 3, 3, 3, 3, 4, 5, 6, 7]
    L2 = [1, 8, 10, 1, 2, 3, 3, 4, 1, 5, 6]
    
    # L1과 L2에서 겹치는 숫자 찾기
    set(L1) & set(L2)	# 리스트를 집합으로 변환한 후 합집합. 결과값 : {1, 2, 3, 4, 5, 6}
    # 집합은 "자동으로 오름차순 정렬"됨

     

     

    사전 (Dictionary)

    파이썬에서 리스트와 함께 많이 사용되는 구조.

    파이썬에서 제공하는 사전 자료형은 key-value 형태로 저장됨 => 순서가 아닌 의미 있는 값을 통해서 데이터 접근 가능함

    Hash Table 이라고도 불리며 데이터 관리에서 중요함

    집합과의 차이점을 두기 위해 원소에 반드시 :(콜론)이 들어가야 함

    {key1:value1, key2:value2, ...} 형태로 표현함

    # key는 imutable data type만 가능 (int, float, str, tuple)
    # key는 unique 해야 함 => 동일한 key가 있다면 나중에 추가되는 key : value로 overwrite 됨
    dict = {'a' : 1, 'b' : 5}	# 결과값 : {'a' : 1, 'b' : 5}
    
    dict = {'John' : '0011', 'Maria' : 1234}	# 결과값 : {'John' : '0011', 'Maria' : 1234}
    
    # key값이 이미 존재하면 key값으로 indexing되며, key값이 없으면 원소를 추가함(assignment)
    dict['a'] = 3	# 결과값 : {'John' : '0011', 'Maria' : 1234, 'a' : 3}
    dict['a']	# 결과값 : 3
    
    dict2 = {'a' : 400, 'a' : -3, 'b' : 3, 'z' : 3.14, 'p' : 100, (1, 2) : 3.14, 1 : 1}
    # 결과값 : {'a' : -3, 'b' : 3, 'z' : 3.14, 'p' : 100, (1, 2) : 3.14, 1: 1}
    # key값 'a'가 두 번 호출되었으며, 가장 마지막에 입력한 value값으로 삽입됨

     

    사전 관련 함수

    dict = {'name' : 'kim', 'phone' : '01012345678', 'birth' : '1234'}
    
    # keys() : 사전의 모든 key값들 출력
    dict.keys()		# 결과값 : dict_keys(['name', 'phone', 'birth'])
    
    # values() : 사전의 모든 value값들 출력
    dict.values()		# 결과값 : dict_values(['kim', '01012345678', '1234'])
    
    # items() : 사전의 모든 key, value 쌍 출력
    dict.items()		# 결과값 : dict_items([('name', 'kim'), ('phone', '01012345678'), ('birth', '1234')])
    
    # get() : 사전의 원소 가져오기
    dict.get('height', 0)	# key값이 height인 value 가져오는데 없으면 0 반환. 결과값 : 0

     

     

    Sequence에 해당 데이터가 존재하는지 확인하는 방법

    'phone' in dict	# 결과값 : True
    
    '1234' in dict.values()	# 결과값 : True
    
    L = [1, 2, 3, 4]
    t = (5, 6, 7, 8)
    s = {'a', 2, 3.14}
    st = 'hello'
    
    3 in L		# 결과값 : True
    9 in L		# 결과값 : False
    5 in t		# 결과값 : True
    'a' in s	# 결과값 : True
    'elo' in st	# 결과값 : False
    'ello' in st	# 결과값 : True

    '프로그래밍 > Python' 카테고리의 다른 글

    [Python] 조건문 (if, elif, else)  (0) 2024.08.06
Designed by Tistory.