[기본 문법] - 자료형

bob_ssso·2022년 1월 9일

파이썬

목록 보기
3/9

파이썬의 자료형으로는 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등이 있다.

🥸 실수 자료형


a = 5. # 소수부가 0일 때 0을 생략 → 5.0
a = -.7 # 정수부가 0일 때 0을 생략 → -0.7

지수 표현 방식

임의의 큰 수 표현. 최댓값이 10억 미만이라면 무한(INF)으로 1e9 사용.

a = 1e9 # 1,000,000,000
a = 57.25e1 # 572.5
a = 3954e-3 # 3.954
  • IEEE754 표준에서 실수형은 4 혹은 8 바이트의 고정 크기 메모리 할당해서 미세한 오차로 정확도에 한계를 가짐
  • round() 함수로 반올림해 실수 값 제대로 비교하자
a = .3 + .6 # 0.899999999
a = round(a,4) # 0.9

수 자료형의 연산

  • / : 나눠진 결과 실수형으로 반환 ex) 7 / 3 → 2.3333333333335
  • // : 몫 연산자 ex) 7 // 3 → 2
  • ** : 거듭 제곱 연산자 ex) 5 ** 3 → 125

🥸 [리스트 자료형]


java의 array, 연결리스트 그리고 c++의 STL vector와 기능적으로 유사. 배열 혹은 테이블이라고 불리기도,,

# 비여있는 리스트 선언
a = list() 
b = []

# 직접 데이터를 넣어 초기화
a = [1,2,3,4,5]
print(a) # [1,2,3,4,5]

# 크기가 N이고, 모든 값이 0인 1차원 리스트 초기화
n = 5
a = [0] * n
print(a) # [0,0,0,0,0] 

특정 스트링을 가지고 배열을 만들고 싶다면!

print(list("17")) # ['1', '7']
print(list(17)) # 🚨 error - 'int' object is not iterable

리스트의 인덱싱과 슬라이싱

  • 인덱스 값을 입력하여 리스트의 특정한 원소에 접근하는 것을 인덱싱이라고 함.
    음의 정수를 넣의면 원소를 거꾸로 탐색
  • 연속적인 위치를 갖는 원소들을 가져와야 할 때 슬라이싱. 끝은 +1.
a =[1,2,3,4,5,6,7]
print(a[-1]) # 뒤에서 첫 번쨰 원소 출력 : 7
print(a[0:4]) # 0-3의 원소 : [1,2,3,4]

리스트 컴프리헨션

대괄호 안에 조건문과 반복문 적용해서 리스트 초기화하는 방법. 2차원 리스트 초기화할 떄 굳.

array = [i for i in range(5)] # [0,1,2,3,4]
array = [i for i in range(10) if i % 2 == 1] # [1,3,5,7,9]
array = [i * i for i in range(5)] # [0,1,4,9,16]

n = 3, m = 2 # N X M 크기의 2차원 리스트 초기화
array = [[0] * m for _ in range(n)] #[[0,0],[0,0],[0,0]]
  • 잘못된 2차원 리스트 초기화
    n = 3, m = 2
    array = [[0] * m] * n
    print(array) #[[0,0],[0,0],[0,0]]
    
    array[1][1] = 5 # 🚨 다 같은 객체로 인식돼서 문제 
    print(array) #[[0,5],[0,5],[0,5]]
  • 마! 걍 무식하게 반복만 할 때 언더바(_) 사용!
    for _ in range(5):
    	print("Hello") # 헬로만 5번 출력

리스트 관련 메서드

  • 리스트 크기 : len(list)
  • 리스트에 특정 원소 존재 확인 : if elmnt in list:
  • 특정 원소의 인덱스 : list.index(elmnt)
  • 모든 원소 합 : sum(list)

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

🥸 “문자열 ‘자료’형”


전체 문자열 큰따옴표, 내부적으로 작은따옴표 ㄱㄴ
전체 문자열 작은따옴표, 내부적으로 큰따옴표 ㄱㄴ

data = "Don't you know \"Python\"?" # \ 사용하면, 둘 다 원하는 만큼 포함ㄱㄴ
print(data) # Don't you know "Python"?

문자열 연산

더하기, 곱하기, 인덱싱, 슬라이싱 가능. but 특정 인덱스 값 변경 불가능.

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

a[2] = 'a' #  🚨 Error

문자열 관련 함수

코테를 파이썬으로 본다고 하면, 그 장점으로 문자열 처리가 수월하다는 이야기를 많이 볼 수 있다. 과연 얼마나 좋은지 한 번 기록해 보자.

  1. stratswith
    string.startswith(value, start, end)와 같은 형식. start와 end는 옵션이다. 리턴값은 파라미터에 쓴 값들이 string의 prefix인지 혹은 start와 end 사이에 있는 값인지 확인해준다.
  2. is___()
    문자열이 ___으로만 이루어져 있는지 확인하고 True, False 반환.
    - string.isapha() : 영어, 한글인지 확인. 공백, 특수문자, 숫자X
    - string.isalnum() : 영어, 한글, 숫자인지 확인.
    - string.isalnum() : 숫자인지 확인
txt = "Hello, welcome to my world."
x1 = txt.startswith("Hello") # True
x2 = txt.startswith("wel", 7, 20) # True
x3 = txt.startswith("wel", 1, 5) # False

🥸 (튜플 자료형)


리스트와 유사. 한 번 선언된 값 못 바꿔. 상대적으로 공간(메모리) 효율적

  • 서로 다른 성질 데이터 묶어서 관리 ex) 최단 경로 → (비용, 노드 번호)
  • 데이터 나열을 해싱의 키 값으로 사용해야 할 때
a = (1,2,3,4)
print(a[1:3]) # (2,3)
a[2] = 7 #  🚨 Error

🥸 {사전 : 자료형}


키와 값의 쌍을 데이터로 가지는 자료형. cf) 리스트나 튜플은 순차적으로 저장. 원하는 ‘변경 불가능한 자료형’을 키로 사용 가능. 해시 테이블 이용하므로 O(1) 시간에 연산 처리. 순서 X → 인덱싱으로 값 얻기 X. 사전의 키 이용해 O(1) 시간 복잡도로 조회하는 것.

a = { # 초기화 방법 1
	'hong' : 1,
	'ik' : 2
}
print(a['ik']) # 2

data = dict() # 초기화 방법 2
data['사과'] = 'apple'
data['바나나'] = 'banana'
data['코코넛'] ='coconut'
print(data) # {'사과':'apple','바나나':'banana','코코넛':coconut'}

if '사과' in data:
	print("apple is here!")

관련 함수

# **keys()**함수 - 키 데이터만 뽑아서 리스트
key_list = data.keys()
print(val_list) # dict_keys(['사과','바나나','코코넛'])
for key in key_list:
	print(data[key]) # apple \n banana \n coconut

# **values()** - 값 데이터만 뽑아서 리스트
val_list = list(data.values())
print(val_list) # ['apple','banana','coconut']

🥸 {집합 자료형}


  • 중복 허용 X, 순서 X → 인덱싱으로 값 얻기 X. 집합의 원소 이용해 O(1) 시간 복잡도로 조회
  • 리스트, 문자열로 초기화 가능 - set() 함수 이용
  • 데이터 조회 및 수정에 있어 O(1)의 시간 처리
data = set([1,1,2,3,4,4,5]) # {1,2,3,4,5}
da_ta = {1,1,2,2,3,4,4,4,5} # {1,2,3,4,5}

1 in data # 원소 있는지 조회하기 True
1 not in data # False
data.add(6) # 새로운 원소 추가
data.update([7,8]) # 새로운 원소 여러개 추가
data.remove(3) # 특정한 값 갖는 원소 삭제
data.clear() # 공집합으로 만들기

함수이름이 아닌 연산자를 이용한 집합 사이의 연산. |= 를 사용하면 집합끼리 합칠 수 있고 -=를 통해 어떤 집합에 있는 요소들을 제거할 수 있다.

a = {2,3,4}
a |= {1,2,3} # {1,2,3,4}
a -= {3} # {1,2,4}

더 많은 기능

profile
밥소🐈

0개의 댓글