[Python] 파이썬 문법 - 자료형

Doyeon Lim·2021년 1월 28일
0
post-thumbnail

이것이 코딩 테스트다 with 파이썬을 읽고 작성하는 글입니다.

수 자료형


수 자료형에는 정수형, 실수형이 있다.

정수형

  • 정수를 다루는 자료형, 양의 정수, 음의 정수, 0이 있다.
a = 1000
b = -7
c = 0

실수형

  • 소수점 아래의 데이터를 포함하는 수 자료형, 소수부가 0이거나 정수부가 0인 소수는 0을 생략하고 작성할 수 있다.
a = 157.93
b = -1837.2
c = 5. #5.0
d = -.7 #-0.7
  • 실수형 데이터는 e나 E를 이용한 지수 표현 방식을 이용할 수 있다.

    유효숫자e^지수 = 유효숫자 x 10^지수

  • 주로 코딩테스트에서는 최댓값이 10억 미만일 경우 무한(INF)을 1e9로 표현한다.

a = 1e9 #1000000000.0
b = 75.25e1 #752.5
c = 3954e-3 #3.954
  • 실수형 저장 시 4byte, 혹은 8byte의 고정된 크기의 메모리를 할당하여 실수 정보 표현 정확도에 한계를 가진다.
    예를 들어, 0.3 + 0.6의 값이 10진수 체계에서는 0.9이지만 2진수 체계를 이용하는 컴퓨터 시스템에서는 0.899999...로 값이 저장된다.
a = 0.3 + 0.6 #0.8999999999999999
  • 위와 같이 소수점 값 비교 작업 시에는 round(실수형 데이터, 반올림 위치 -1)함수를 이용해 원하는 결과를 얻어낼 수 있다.
    인자를 하나만 넣을 경우, 소수점 첫째 자리에서 반올림한다.
a = 0.3 + 0.6
print(round(a, 4)) #0.9

print(123.456, 2) #123.46

수 자료형의 연산

  • +, -, *, /, %를 이용해 계산한다.

  • / 연산자는 값을 실수형으로 처리한다. 몫을 얻고자 할 경우, //를 이용한다.

  • % 연산자는 나머지 값을 이용해 홀짝 여부 판단 등에 사용한다.

  • 거듭제곱 연산은 **를 이용한다.

a = 7
b = 3
print(a / b) #2.3333333333333335
print(a % b) #1
print(a // b) #2
print(a ** b) # 343

리스트 자료형


  • 여러 개의 데이터를 연속적으로 담아 처리하기 위해 사용할 수 있다. 배열 혹은 테이블이라고 부르기도 한다.

리스트 생성

  • 대괄호 [ ]안에 원소를 넣어 초기화하고 쉼표(,)로 원소를 구분한다.
  • 인덱스는 0부터 시작한다.
  • 비어있는 리스트는 list() 혹은 간단히 대괄호를 이용해 선언할 수 있다.
a = [1, 2, 3, 4, 5]
b = list()
c = []
  • 크기가 n인 1차원 리스트를 초기화하는 소스코드
a = [0] * n

리스트 인덱싱, 슬라이싱

  • 인덱싱 : 특정한 원소에 접근하는 것, 음의 정수는 원소를 거꾸로 탐색한다.

  • 인덱싱을 이용해 특정 원소의 값을 바꿀 수 있다.

a = [1, 2, 3, 4, 5]
print(a[-1]) #5
a[2] = 10 #a = [1, 2, 10, 4, 5]
  • 슬라이싱 : 연속적인 위치를 갖는 원소를 처리하는 것, 콜론(:)을 이용한다.
a = [1, 2, 3, 4, 5]
print(a[1:3]) #[2, 3]

리스트 컴프리헨션

  • 리스트를 초기화하는 방법 중 하나

  • 리스트의 대괄호 안에 조건문과 반복문을 넣는 방식으로 리스트를 초기화할 수 있다.

  • 0부터 9까지 수 중에서 짝수만 포함하는 리스트를 만드는 소스코드

a = [i for i in range(10) if i % 2 == 0]
print(a) #[0, 2, 4, 6, 8]
  • 1부터 5까지 제곱 값을 포함하는 리스트를 만드는 소스코드
a = [i * i for i in range(1, 6)]
print(a) #[1, 4, 9, 16, 25]
  • 리스트 컴프리헨션은 코딩 테스트에서 2차원 리스트 초기화에 매우 효과적으로 사용될 수 있다.

  • N x M 크기의 2차원 리스트 초기화 소스코드
    특정 크기의 2차원 리스트 초기화는 반드시 리스트 컴프리헨션을 사용해야한다.

n = 3
m = 4
a = [[0] * m for _ in range(n)]
print(a) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 

언더바( _ )의 역할
반복을 수행하되 반복을 위한 변수의 값을 무시하고자 할 때 사용한다.
단순히 "Hello World"를 5번 출력한느 것과 같은 상황에서는 언더바를 사용해 변수를 무시할 수 있다.

리스트 관련 기타 메서드

  • append() : 리스트 맨 뒤에 원소 삽입
  • sort() : 리스트 오름차순으로 정렬, (reverse = True 속성 사용시 내림차순 정렬)
  • reverse() : 리스트 원소의 순서 뒤집기
  • insert(삽입 인덱스, 삽입 값) : 특정 인덱스에 원소 삽입
  • count(값) : 리스트에서 인자의 값을 가지는 데이터 개수 카운드
  • remove(값) : 특정 값을 갖는 원소 제거, 여러 개면 하나만 제거
a = [1, 4, 3]

a.append(2) #[1, 4, 3, 2]
a.sort() #[1, 2, 3, 4]
a.sort(reverse = True) #[4, 3, 2, 1]
a.reverse() #[1, 2, 3, 4]
a.insert(2, 3) #[1, 2, 3, 3, 4]
a.remove(1) #[2, 3, 4, 4]
  • insert(), remove() 함수는 시간 복잡도가 O(N)이므로 시간 초과에 유의할 것.

  • 특정한 값의 원소를 모두 제거하는 소스 코드

a = [1, 2, 3, 3, 4, 5, 6]
remove_set = {2, 3}

result = [i for i in a if i not in remove_set] #[1, 4, 5, 6]

문자열 자료형


문자열 초기화

  • 문자열 변수 초기화 시 큰따옴표나 작은따옴표를 이용한다.
a = 'Hello World' #Hello World
b = "Hello World" #Hello World
c = "'Hello' World" #'Hello' World
d = '"Hello" World' #"Hello" World
e = "\"Hello\" World" #"Hello" World
f = '\'Hello\' World' #'Hello' World

문자열 연산

  • 문자열 변수에 덧셈을 이용해 문자열을 연결할 수 있다.
a = "Hello"
b = "World"
print(a + " " + b) #Hello World
  • 문자열 변수와 양의 정수를 곱해 문자열을 반복할 수 있다.
a = "New"
print(a * 4) #NewNewNewNew
  • 문자열은 내부적으로 리스트와 같이 인덱싱과 슬라이싱을 이용할 수 있다.
a = "abcde"
print(a[2:4]) #cd

튜플 자료형


  • 리스트와 유사하지만 한 번 선언된 값을 변경할 수 없다.
  • 소괄호 ( )를 사용한다.
a = (1, 2, 3, 4)
  • 그래프 알고리즘을 구현할 때 자주 사용된다. 리스트에 비해 상대적으로 공간 효율적이다.

사전 자료형

  • 키와 값의 쌍을 데이터로 가지는 자료형
a = dict()

a['가나다'] = 'abc'
a['라마바'] = 'def'
a['사아자'] = 'ghi'

print(a) #{'가나다': 'abc', '라마바': 'def', '사아자': 'ghi'}
  • 사전 자료형에 특정 원소가 있는지 검사하는 소스 코드 (리스트나 튜플에서도 사용할 수 있는 문법)
a = dict()

a['가나다'] = 'abc'
a['라마바'] = 'def'
a['사아자'] = 'ghi'

if '가나다' in a:
    print("'가나다' 키-값이 존재합니다.")

# '가나다' 키-값이 존재합니다.

사전 자료형 관련 함수

a = dict()

a['가나다'] = 'abc'
a['라마바'] = 'def'
a['사아자'] = 'ghi'

key_list = a.keys()
print(key_list) #dict_keys(['가나다', '라마바', '사아자'])

value_list = a.values()
print(value_list) #dict_values(['abc', 'def', 'ghi'])

for key in key_list:
    print(a[key])
    
#abc
#def
#ghi

집합 자료형

  • 중복을 허용하지 않고 순서가 없다. 따라서 인덱싱을 통해 값을 얻을 수 없다.

  • set() 함수 또는 중괄호 안에 콤마를 기준으로 값을 구분해서 넣어 집합 자료형을 초기화 할 수 있다.

a = set([1, 1, 2, 4, 5]) #[1, 2, 4, 5]
b = {1, 2, 3, 3, 3, 4} #{1, 2, 3, 4}

집합 자료형의 연산

  • 합집합( | ), 교집합( & ), 차집합( - ) 연산이 있다.
a = set([1, 1, 2, 4, 5]) #[1, 2, 4, 5]
b = {1, 2, 3, 3, 3, 4} #{1, 2, 3, 4}

print(a | b) # {1, 2, 3, 4, 5}
print(a & b) # {1, 2, 4}
print(a - b) # {5}

집합 자료형 관련 함수

  • add(값) : 값 추가
  • update(값 여러개) : 여러 값 추가
  • remove(값) : 값 삭제
a = set({1, 2, 3})

a.add(4) #{1, 2, 3, 4}
a.update([5, 6]) #{1, 2, 3, 4, 5, 6}
a.remove(3) #{1, 2, 4, 5, 6}
profile
🙇‍♀️ Android

0개의 댓글