자료형
파이썬의 자료형은 매우 강력하므로, 자료형만 잘 알고있어도 쓰임새가 많다
모든 프로그래밍은 데이터를 다루는 행위
- 정수형, 실수형, 복소수형, 문자열, 리스트, 튜플, 사전 등이 있다
- 다른 언어의 라이브러리 내부 기능을 기본 자료형으로 가지고있는 경우가 많음
실수형
- 실수부, 정수부의 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"
튜플
소괄호를 이용하는 리스트
리스트보다 더 적은 메모리를 사용하는 장점이 있다
-> 한 번 선언한 튜플은 변경 불가
사용 예
- 서로 다른 성질의 데이터를 함께 사용할 때
-> 최단 경로 알고리즘에서 (비용, 노드 번호) 형태로 사용 - 데이터의 나열을 해싱의 키 값으로 사용할 때
-> 변경이 불가하므로 키 값으로 사용 가능 - 메모리를 절약하고 싶을 때
사전 자료형
- 딕셔너리
- 키 / 값 쌍을 데이터로 가지는 자료형
- 해시 테이블을 이용하기 때문에 데이터의 조회나 수정을 상수 시간 O(1)에 처리 가능
dict.keys() 딕셔너리의 키만 모아서 리스트로 출력
dict.values() 딕셔너리의 값만 모아서 리스트로 출력
집합 자료형 set
- 중복을 허용하지 않고 순서가 없는 자료형
- 존재하는지 하지않는지? 판별할 때
- 중복을 제거할 때?
- 리스트, 문자열을 이용해서 초기화 가능
- {} 안에 값을 콤마로 구분하여 초기화 가능
- 조회 및 수정을 상수 시간 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)
'프로그래밍 언어 > Python' 카테고리의 다른 글
Python) conda 가상환경 생성 및 실행 (0) | 2022.03.21 |
---|---|
Python) conda install 패키지를 찾을 수 없는 경우 (0) | 2022.03.21 |
Python) schedule 스케줄러 (0) | 2022.03.21 |
Python - .ipynb(notebook)파일을 .py(파이썬)파일로 변경하기 (0) | 2021.01.26 |
Python - 웹 크롤링이란? (feat.BeautifulSoup) (0) | 2021.01.15 |
댓글