본문 바로가기
프로그래밍 언어/Python

Python) 자료형

by nomfang 2021. 5. 30.
728x90
반응형

자료형

파이썬의 자료형은 매우 강력하므로, 자료형만 잘 알고있어도 쓰임새가 많다
모든 프로그래밍은 데이터를 다루는 행위

  • 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등이 있다
  • 다른 언어의 라이브러리 내부 기능을 기본 자료형으로 가지고있는 경우가 많음

실수형

  • 실수부, 정수부의 0은 생략 가능

10e9 => 10^9의 값과 같음
INF => 무한

컴퓨터는 실수형의 수를 정확하게 표현하는데에 한계가 있음

2진법을 사용하기 때문
최대한 근사치를 주지만 조금 다르다
실수끼리의 사칙연산 후
실수와 비교하면 false가 나온다
-> 반올림 등을 이용하여 해결가능

% 나머지 연산
** 거듭제곤 연산

리스트 자료형 = []

C나 자바의 배열, 연결 리스트와 유사한 기능 지원
C++의 STL vector와 기능적으로 유사하다
인덱스는 0부터

[0] * 9 => [0,0,0,0,0,0,0,0,0]

-인덱스 사용 가능 ( -1은 뒤에서 첫 번째)

인덱스 슬라이싱

a[1:3] => 인덱스 1번 부터 2번까지

리스트 컴프리헨션

  • 리스트를 초기화하는 방법 중 하나, 조건문이나 반복문을 적용하여 리스트 초기화

array = [i for i in range(10)]
0~9 까지의 값을 넣어 리스트 초기화

array = [i for i in range(10) if i % 2 == 1] ## 홀수일 경우에만

array = [i * i for i in range(10)] ## i를 제곱하여 초기화

2차원 리스트를 초기화 할 때 더 효과적이다

2차원 배열 생성
n = 4
m = 3
array = [[0] * m for _ in range(n)]

변수의 값을 사용하지 않을 때 언더바 _ 사용 가능

출처 : 동빈나 유튜브

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

remove_set = {3, 5}

result = [i for i in a if i not in remove_set]

a의 원소중 remove_set에 없는 요소만 result에 담는 (remove_set에 있는 값만 삭제하는)

문자열

\ 백슬래시 사용 시 바로 뒤의 문자는 문자로 사용 가능
문자열 + 문자열 => 연결
문자열 * 2 => 문자열 2번
문자열도 리스트처럼 인덱싱 가능
a = "hello"
a[0:2] => "he"

튜플

소괄호를 이용하는 리스트
리스트보다 더 적은 메모리를 사용하는 장점이 있다
-> 한 번 선언한 튜플은 변경 불가

사용 예

  1. 서로 다른 성질의 데이터를 함께 사용할 때
    -> 최단 경로 알고리즘에서 (비용, 노드 번호) 형태로 사용
  2. 데이터의 나열을 해싱의 키 값으로 사용할 때
    -> 변경이 불가하므로 키 값으로 사용 가능
  3. 메모리를 절약하고 싶을 때

사전 자료형

  • 딕셔너리
  • 키 / 값 쌍을 데이터로 가지는 자료형
  • 해시 테이블을 이용하기 때문에 데이터의 조회나 수정을 상수 시간 O(1)에 처리 가능

dict.keys() 딕셔너리의 키만 모아서 리스트로 출력
dict.values() 딕셔너리의 값만 모아서 리스트로 출력

집합 자료형 set

  • 중복을 허용하지 않고 순서가 없는 자료형
  1. 존재하는지 하지않는지? 판별할 때
  2. 중복을 제거할 때?
  • 리스트, 문자열을 이용해서 초기화 가능
  • {} 안에 값을 콤마로 구분하여 초기화 가능
  • 조회 및 수정을 상수 시간 O(1)에 처리 가능
  • 합집합, 교집합, 차집합 연산 가능

원소 하나 추가 .add()
원소 여러개 추가 .update()
원소 삭제 .delete()

각 자료형 특징

  • 리스트나 튜플은 순서가 있기 때문에 인덱싱으로 값 추출 가능
  • 사전, 집합 자료형은 순서가 없기 때문에 key/원소 를 이용해 O(1)의 시간 복잡도로 조회 가능
  • 사전 자료형과 집합 자료형의 key나 원소는 튜플이나 문자열 등으로

입력, map()

input() => 한 줄의 문자열을 입력 받는 함수
map() => 리스트의 모든 원소에 각각 같은 함수를 적용

a = list(map(int, input().split()))
-> 문자열을 입력 받아.공백으로 구분한 것을, 정수 자료형으로 변경하여 list로 만든다
a, b, c = map(int, input().split())
-> 자료를 3개 입력받아 공백으로 구분하여 int로 변환 후 a, b, c 변수에 담는

빠르게 입력 받기

sys라이브러리에 정의되어 있는 sys.stdin.readline() 메서드 사용
-> 입력 시 엔터가 함께 입력되므로 rstrip() 메서드와 함께 사용
-> 이진 탐색, 정렬, 그래프에서 자주 사용됨

import sys
data = sys.stdin.readline().rstrip()

출력

print()
-> 출력 후 줄바꿈

print(a, b, end=" ") => 줄바꿈 없이 출력하고 싶을 때 end 속성 사용

f-String

print(f"정답은 {answer}입니다")

조건문

if x > 10:
    print('x 는 10보다 큽니다')

파이썬은 코드 블록을 들여쓰기로 구분
if 후에 탭 1칸 (공백문자 4개가 표준)

if 조건: ~ elif 조건: ~ else

if만 사용가능
elif까지 사용 가능
elif 여러번 사용 가능
else 는 나머지 모든 경우

논리 연산자

&& => and
|| => or
! => not

in 연산자

리스트, 튜플, 딕셔너리, 문자열 등에서 자료의 포함 여부를 확인

x in 리스트
x in 문자열
x not in 리스트 등으로 사용 가능

실행되는 코드 블럭이 한 줄인 경우
줄바꿈 및 들여쓰기 생략 가능

파이썬에서는 대수학의 부등식을 그대로 사용 가능
0 < x < 20

반복문

while 조건:
실행문

for 변수 in 리스트:
실행문

for문에서 리스트를 생성할 때 range()를 자주 사용함

a = [1, 2, 3]
for i in range(len(a)):
print(i)
1, 2, 3 출력
len()은 리스트 길이 출력

for i in range(0, 10, 1):
print(i)
0 ~ 9 까지 사용

반복문에서 if continue 사용 => 조건에 만족하면 건너뛰고 다음 반복 실행
반복문에서 if break 사용 => 조건에 만족하면 반복문 종료

함수

def add(a, b):
return a + b

a = add(1,2)
print(a) => 3

a = add(a = 2, b = 1) 처럼 사용 가능

함수 내에서 전역 변수를 참조하기 위해서는 global 키워드 사용 해야함

함수의 return을 여러개 가능

def a(a, b):
return a+b, a-b, a*b

c, d, e = a(2,1)

print(c, d, e) => 3, 1, 2

람다 표현식

  • 함수를 간단하게 작성, 이름 없는 함수
  • 뭔가 애로우 함수 느낌

print( (lambda a, b: a+ b)(3, 7) ) => 10

arr = [('a', 30), ('b', 20), ('c', 10)]
sorted(arr, key=lambda x: x[1]) => c, b, a 순으로 정렬 됨

map() 함수와 함께 사용 시 효과적

list1 = [1, 2, 3]
list2 = [3, 2, 1]

result = map(lambda a, b: a + b, list1, list2)
print(result) => [4, 4, 4]

 

 

 

실전에서 유용한 라이브러리

 

 

내장함수

sum(리스트)

-> 리스트의 전체 합

min() -> 최소값

max() -> 최대값

eval() -> 사람이 쓰는 형식을 결과로 ( eval("(3+5)*7") => 56 )

 

sorted => 오름차순 

sorted(리스트, reverse=True) => 내림차순

 

sorted(arr, key=lambda x: x[1], reverse=True)

 

 

 

 

반응형

댓글