2022.03.03 - [이코테] 파이썬 기초 문법(2) - 파이썬의 자료형
기본 입출력
자주 사용되는 표준 입력 방법
- input() : 한 줄의 문자열을 입력 받는 함수
- map() : 리스트의 모든 원소에 각각 특정한 함수를 적용할 때
- list() : 리스트 선언
ex) 공백을 기준으로 구분된 데이터 입력 받기
- list(map(int, input().split())))
공백을 기준으로 구분된 데이터의 개수가 많지 않다면
- a, b, c = map(int, input().split())
- 공백 기준으로 문자열로 입력 받아서 -> int로 형변환
a = list(map(int, input().split()))
print(a)
>>> 1 2 3 4 5
>>> [1, 2, 3, 4, 5]
빠르게 입력받기
- sys 라이브러리에 정의된 sys.stdin.readline() 메소드 이용
단, 입력 후 엔터가 줄바꿈 기호로 입력되므로 rstrip() 메소드 함께 사용
- 입력을 많이 받는 경우 필요함(그래프, 정렬, 이진 탐색 시 유용)
자주 사용되는 표준 출력 방법
- 기본 출력 : print()
- 기본적으로 출력 이후에 줄바꿈 수행(원하지 않으면 end 속성 이용)
- f-string
- 문자열 앞에 접두사 f를 붙여 사용
- 문자열과 정수를 함께 넣을 수 있다는 이점
answer = 7
print(f"정답은 {answer}입니다.")
>>> 정답은 7입니다.
조건문
- 코드의 블록과 들여쓰기로 지정
- 기본 형태 : if ~ elif ~ else
- 비교 연산자, 논리 연산자(and, or, not) 기타 연산자(in, not in) 존재
- 기타 연산자는 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
X in 리스트 : 리스트 안에 X가 들어가 있을 때 참(True)이다.
X not in 문자열 : 문자열 안에 X가 들어가 있지 않을 때 참(True)이다.
- pass 키워드
- 아무것도 처리하고 싶지 않을 때
- 디버깅 과정에서 형태만 만들어놓고 넘어갈 수 있음
- 조건문의 간소화
- 실행될 소스코드가 한줄인 경우, 굳이 줄바꿈 안해도됨.
- 조건부 표현식(Conditional Expression): if ~ else문 한 줄에 작성
score = 85
if score >= 80: result = "Success"
else: result = "Fail"
print(result)
>>>Success
#조건부 표현식
result = "Success" if score >= 80 else "Fail"
print(result)
>>>Success
반복문
- while문, for문
- 연속적인 값을 차례대로 순화할 땐 range()
- range(시작값, 끝값+1)
-> 인자를 하나만 넣으면 시작값은 자동으로 0
- continue 키워드, break 키워드
scores = [90, 85, 77, 65, 97]
cheating_student_list = {2, 4}
for i in range(5):
if i+1 in cheating_student_list:
continue
if scores[i] >= 80:
print(i+1, "번 학생은 합격입니다.")
>>>1 번 학생은 합격입니다.
>>>5 번 학생은 합격입니다.
함수
1. 내장 함수 : input(), print() 등 파이썬에서 제공하는 함수
2. 사용자 정의 함수
- 어떻게 정의하는가?
def 함수명(매개변수):
실행할 소스코드
return 반환값
- 파라미터의 변수 직접 지정 가능 ( 순서 달라도 상관없음 )
add(b=3, a=7)
- global 키워드 : 함수 바깥에 선언된 변수 참조
array = [1, 2, 3, 4, 5]
def func():
global array #값을 변경하거나 재할당하려면 global 키워드 이용
array = [3, 4, 5]
array.append(6)
func()
print(array)
>>> [3, 4, 5, 6]
- 여러개의 값 반환 가능(packing, unpacking)
def operator(a, b):
add_var = a + b
sub_var = a - b
mul_var = a * b
div_var = a / b
return add_var, sub_var, mul_var, div_var #packing
a, b, c, d = operator(7, 3) #unpacking
print(a, b, c, d)
>>> 10 4 21 2.3333333333333335
람다표현식
: 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있음
1. 내장함수에서 자주 사용되는 람다 함수
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
#정렬 기준 설정: 두번째 원소
#1. 일반 함수 활용
def my_key(x):
return x[1]
print(sorted(array, key=my_key))
#2. 람다표현식 활용
print(sorted(array, key=lambda x: x[1]))
>>>[('이순신', 32), ('홍길동', 50), ('아무개', 74)]
>>>[('이순신', 32), ('홍길동', 50), ('아무개', 74)]
2. 여러개의 리스트에 동일한 규칙을 가지는 함수 적용
list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]
result = map(lambda a, b: a+b, list1, list2)
print(list(result))
>>> [7, 9, 11, 13, 15]
실전에서 유용한 표준 라이브러리
- 내장 함수 : 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
- itertools : 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공 / 순열과 조합 라이브러리
- heapq : 힙(Heap) 자료 구조 제공 / 우선순위 큐
- bisect : 이진탐색(Binary Search) 기능 제공
- collections : 덱(deque), 카운터(Counter) 등의 유용한 자료구조 포함
- math : 필수적인 수학적 기능 제공 / 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수부터 파이(pi)와 같은 상수 포함
순열과 조합
- 순열 : 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것 : nPr
- 조합 : 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택하는 것 : nCr
Counter
- 등장횟수를 세는 기능
- 리스트와 같은 반복가능한 객체가 주어졌을 때 내부의 원소가 몇번씩 등장했는지 count
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue'])
print(counter['green'])
print(dict(counter)) #사전자료형으로 반환
>>> 3
>>> 1
>>> {'red': 2, 'blue': 3, 'green': 1}
최대공약수와 최소공배수
import math
#최소공배수(LCM)을 구하는 함수
def lcm(a, b):
return a * b // math.gcd(a, b)
a = 21
b = 14
print(math.gcd(a, b)) #최대공약수 GCD 계산
print(lcm(a, b)) #최소공배수 LCM 계산
>>>7
>>>42