[Python] ☘️ 자료형

Joey Hong·2020년 10월 6일
0

출처
동빈나 이코테
참고하면 좋은 포스트
파이썬 코딩테스트 요구사항 분석

Python 자료형 - 정수, 실수, 복소수, 문자열, 리스트, 튜플, 사전

☘️ 정수형 (Integer) 자료형

양의 정수, 음의 정수, 0

☘️ 실수형 (Real Number) 자료형

소수점 아래 데이터 포함

소수부나 정수부가 0인 소수는 0을 생략하고 표기 가능

a = 5.
# 5.0
a = -.7
# -0.7

🦨 지수 표현 방식

  • 1e9는 최댓값이 10억 미만인 경우 무한(INF)값으로 사용 가능
1e9 = 10⁹ = 1,000,000,000

🌸 지수는 실수형으로 출력

a = 1e9
# 1000000000.0

a = 12.34e1
# 123.4

a = 5678e-3
5.678

🌸 int형으로 바꾸기

a = int(1e9)
# 1000000000

🦨 실수형 정확도 한계

2진수로 소수점 표현 한계

a = 0.3
b = 0.6
a + b == 0.9
# 0.899999999999999
# False

🌸 round()

round(실수, 표현할 최대 소수점 자리)

  • 소수 셋째 자리에서 반올림(둘째 자리까지 표기)
round(123.456, 2)
# 123.46

🦨 나누기 연산

나누기 연산자는 결과를 실수형으로 반환

a = 7
b = 3

print(a / b)
# 2.333333333333333333335

🌸 나머지와 몫

  • % 나머지
  • //
a = 7
b = 3

print(a % b)
# 1

print(a // b)
# 2

🌸 거듭제곱

  • **
a = 5
b = 3

print(a ** b)
# 125

print(a ** 0.5)
# 2.3606797749979

☘️ 리스트 (List) 자료형

  • C나 자바의 배열(Array) 기능 및 연결 리스트와 유사한 기능 지원
  • C++ 의 STL vector와 기능적으로 유사
  • 배열 혹은 테이블이라고도 불림

🌸 초기화

a = [1, 2, 3, 4]
# [1, 2, 3, 4]

b = [0] * 10
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

🌸 비어있는 리스트 선언

b = list()
c = []

🌸 인덱싱 (indexing)

음의 정수로 거꾸로 인덱싱 가능

a = [1, 2, 3, 4]
print(a[-1])
# 4

🌸 슬라이싱 (slicing)

시작 인덱스부터 끝 인덱스 전까지

a = [1, 2, 3, 4]
print(a[1:3])
# [2, 3]

🦨 리스트 컴프리헨션

대활호 안에 조건문이나 반복문 작성

  • range()는 시작 인덱스부터 끝 인덱스 전까지
  • 2차 배열 초기화할 때 효과적
array = [i for i in range(10)]
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

array = [i for i in range(20) if i % 2 == 1]
# [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

array = [i * i for i in range(1, 10)]
# [1, 4, 9, 16, 25, 36, 49, 64, 81]

a = [1, 2, 3, 4, 5]
remove_set = {3, 5}	# 집합 자료형
result = [i for i in a if i not in remove_set]
print(result)
# [1, 2, 4]

🌸 일반적인 코드와 비교

# 리스트 컴프리헨션
array = [i for i in range(20) if i % 2 == 1]

# 일반적인 코드
array = []
for i in range(20):
	if (i % 2) == 1:
    	array.append(i)

🌸 N x M 2차배열 초기화

n = 4
m = 3
array = [[0] * m for _ in range(n)]

가로 m 세로 n

🚨 주의

각 리스트가 모두 같은 객체로 인식되어 특정 인덱스번째 리스트에 접근 불가

n = 4
m = 3
array = [[0] * m] * n
array[1][1] = 5
# [[0, 5, 0], [0, 5, 0], [0, 5, 0], [0, 5, 0]]

🌸 언더바

변수 값 무시할 때 사용

for _ in range(5):
	print('hi')
# hihihihihi

🦨 리스트 관련 메소드

함수사용법설명시간복잡도
append()변수명.append()리스트에 원소 하나 삽입O(1)
sort()변수명.sort()기본 정렬(오름차순)O(NlogN)
변수명.sort(reverse = True)내림차순 정렬
reverse()변수명.reverse()원소 순서 뒤집기O(N)
insert()변수명.insert(인덱스, 값)인덱스 위치에 값을 삽입O(N)
count()변수명.count(값)특정 값을 가지는 데이터 개수 세기O(N)
remove()변수명.remove(값)특정한 값을 갖는 원소 제거. 여러개면 하나만 제거O(N)

☘️ 문자열 자료형

🦨 큰따옴표와 작은따옴표

  • "' 로 초기화
  • "로 문자열 구성시 내부에 ' 포함 가능
  • '로 문자열 구성시 내부에 " 포함 가능
  • \로 원하는 만큼의 "' 포함 가능
data = "Don't you know \"Python\"?"
print(data)
# Don't you know "Python"?

🦨 문자열 연산

🌸 덧셈기호 +

문자열이 더해져 연결(Concatenate)됨

a = "Hello"
b = "World"
print(a + " " + b)
# Hello World

🌸 곱셉기호 *

양의 정수와 곱셈시 그 값만큼 여러번 더해짐

a = "String"
print(a * 3)
# StringStringString

🌸 인덱싱과 슬라이싱

  • 다만 문자열의 특정 인덱스 값은 변경 불가
a = "ABCDEF"
print(a[2:4])
CD

☘️ 튜플 자료형

  • 리스트와 유사
  • 한 번 선언된 값 변경 불가
  • 리스트는 대괄호[] 튜플은 소괄호()
  • 리스트에 비해 상대적으로 공간 효율적
a = (1, 2, 3, 4, 5, 6, 7, 8, 9)

print(a[3])
# 4

print(a[1:4])
# (2, 3, 4)

🌸 튜플을 사용하면 좋은 경우

서로 다른 성질의 데이타

  • 서로 다른 성질의 데이터 묶어서 관리
    • 최단 경로 알고리즘에서 (비용, 노드 번호)의 형태로 자주 사용

해싱(Hashing)

  • 데이터 나열을 해싱의 키 값으로 사용할 때
    • 변경이 불가능해 키값으로 사용하기 좋음

효율적인 메모리 관리

리스트보다 효율적으로 메로리를 사용할 경우

☘️ 사전 자료형

🌸 특징

키(key)값(value)의 쌍을 데이타로 가지는 자료형

  • 리스트나 튜플가 값을 순차적으로 저장하는 것과 대비
  • 인덱싱을 통해 값 얻는 것 불가능

변경 불가능한 자료형 (Immutable)

변경 불가능한 자료형을 키로 사용 가능

해시 테이블 (Hash Table)

  • Python의 사전 자료형은 해시 테이블을 사용
    • 데이터의 조회 및 수정에 있어서 O(1)의 시간에 처리 가능
  • 다른 언어에서는 해시 테이블로 불림

시간복잡도 O(1)

  • 사전의 키 혹은 집합의 원소를 이용해 O(1)의 시간 복잡도로 조회

🦨 초기화

# 방법1
data1 = dict()
data['사과'] = 'Apple'
data['바나나'] = 'Banana'
data['코코넛'] = 'Coconut'

# 방법2
data2 = {
    '사과': 'Apple',
    '바나나': 'Banana',
    '코코넛': 'Coconut'
}

print(data1)
# {'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}
print(data2)
# {'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}

🌸 키값 존재

print(data)
# {'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}

if '사과' in data:
	print("'사과'"를 키로 가지는 데이타가 존재합니다.")
    
# '사과'"를 키로 가지는 데이타가 존재합니다.

🦨 keys()와 values()

키/값 데이타만 뽑아서 리스트로 사용가능

  • 하나의 객체로 반환
print(data)
# {'사과': 'Apple', '바나나': 'Banana', '코코넛': 'Coconut'}

key_list = data.keys()
print(key_list)
# dict_keys(['사과', '바나나', '코코넛'])

value_list = data.values()
print(value_list)
# dict_values(['Apple', 'Banana', 'Coconut'])

🌸 리스트형

객체가 아닌 리스트형으로 변환

key_list = list(dict.keys())
print(key_list)
# ['Apple', 'Banana', 'Coconut']

🌸 원소 접근

for key in key_list:
	print(data[key])
# Apple
# Banana
# Coconut

☘️ 집합 자료형

  • 중복 허용X
  • 순서X
  • 원소(Element)를 이용해 데이터를 O(1)의 시간 복잡도로 조회 및 수정

🦨 초기화

  • 리스트/문자열 이용해서 초기화 가능
    • set() 함수 사용
# 방법1
data = set([1, 1, 2, 3, 4, 4, 5])
print(data)
# {1, 2, 3, 4, 5}

# 방법2
data = {1, 1, 2, 3, 4, 4, 5}
print(data)
# {1, 2, 3, 4, 5}

🦨 연산

  • 합집합 (A ⋃ B)
  • 교집합 (A ⋂ B)
  • 차집합 (A - B)
a = set([1, 2, 3, 4, 5])
b = set([3, 4, 5, 6, 7])

# 합집합 (A ⋃ B)
print(a|b)
# {1, 2, 3, 4, 5, 6, 7}

# 교집합 (A ⋂ B)
print(a&b)
# {3, 4, 5}

# 차집합 (A - B)
print(a - b)
# {1, 2}

🦨 집합 자료형 관련 함수

  • add()
  • update() - 여러 원소 추가
  • remove()
data = set([1, 2, 3])
print(data)
# {1, 2, 3}

data.add(4)
print(data)
# {1, 2, 3, 4}

data.update([5, 6])
print(data)
# {1, 2, 3, 4, 5, 6}

data.remove(3)
print(data)
# {1, 2, 4, 5, 6}
profile
개발기록

0개의 댓글