[Python] 기본 함수와 문법

Joey Hong·2020년 10월 8일
0

출처
동빈나 이코테
참고하면 좋은 포스트
파이썬 코딩테스트 요구사항 분석

🐩 입출력

🐾 기본 입력

# 공백을 기준으로 입력 받음
data = list(map(int, input().split()))
print(data)
# 65 90 75 34 99 입력
# [65, 90, 75, 34, 99]

# 공백을 기준으로 구분된 데이터가 많지 않을 때
a, b, c, d, e = map(int, input().split())
print(a, b, c, d, e)
# 65 90 75 34 99 입력
# 65 90 75 34 99

🦴 input()

한 줄의 문자열의 입력 받는 함수

  • input()을 사용 후 직접 입력해줘야 한다
n = int(input())
print(n)
# 5입력
# 5

data = input()
print(data)
# 65 90 75 34 99 입력
# 65 90 75 34 99

🦴 split()

문자열을 공백 기준으로 나눠 리스트로 반환

data = input().split()
print(data)
# 65 90 75 34 99 입력
# ['65', '90', '75', '34', '99']

🦴 map()

리스트의 각각의 원소에 특정한 함수를 적용할 때

data = input().split()
# ['65', '90', '75', '34', '99']
  • 위 원소들을 int형으로 변환
  • map을 사용해 각 원소에 특정한 함수int() 적용
  • list()를 사용해서 리스트로 변환
data = list(map(int, input().split()))
print(data)
# 65 90 75 34 99 입력
# [65, 90, 75, 34, 99]

🦴 sys.stdin.readline()

Python의 sys 라이브러리에 정의된 메서드

  • 입력의 개수가 너무 많을 때 사용
  • 이진탐색, 정렬, 그래프 관련 문제에서 자주 사용
  • 입력 후 엔터(Enter)가 줄바꿈 기호로 입력되므로 rstrip() 메서드 함께 사용
import sys

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

🐾 출력 함수

🦴 print()

  • 파이썬 기본 함수
  • 기본적으로 출력 후 줄 바꿈 수행
    • 줄 바꿈을 원치 않는 경우 'end' 속성 사용
a = 1
b = 2
print(a, b)
# 1 2

# 'end'속성으로 줄 바꿈을 공백으로 대체
print(a, end=" ")
print(b, end=" ")
# 1 2

🦴 f-string

  • Python 3.6부터 사용 가능
  • 문자열 앞에 f 붙여서 사용
  • 중괄호 안에 변수명 기입
answer = 7
print(f"정답은 {answer}입니다.")
# 정답은 7입니다.

🐩 조건문

들여쓰기 (Indent)

  • 코드의 블록(Block)을 들여쓰기로 지정함
  • 4개의 공백 문자가 표준

🦴 elif

if ~ elif ~ else

a = -5

if a == 0:
	print("a == 0")
elif a > 0:
	print("a > 0")
else:
	print("a < 0")
    
# a < 0

🦴 논리 연산자

논리 값 (True/False) 사이의 연산 수행

논리 연산자설명
X and YX와 Y가 모두 참일 때 참
X or YX와 Y 중 하나만 참이면 참
not XX가 거짓일 때 참

🦴 기타 연산자

in 연산자not in 연산자

  • 리스트, 튜플, 문자열, 사전에 모두 사용 가능
연산자설명
x in AA 안에 x가 들어있을 때 참
x not in AA 안에 x가 안 들어있을 때 참

🦴 pass

아무것도 처리하고 싶지 않을 때 사용

  • 디버깅 과정에서 조건문의 형태만 만들어 놓고 조건문 처리부분은 비워둘 때
score = 85

if score >= 80:
	pass
else: 
	pass

print("프로그램 종료")

🐾 조건문의 간소화

🦴 한 줄에 표현

조건문에서 실행될 소스코드가 한 줄인 경우는 한 줄로 표현 가능

score = 85

if score >= 80: result = "Success"
else: result = "Fail"
# Success

🦴 조건부 표현식(Conditional Expression)

if ~ else문 한 줄에 작성 가능

score = 85

result = "Success" if score >= 80 else "Fail"
print(result)
# Success

🦴 수학의 부등식 그대로 사용

아래 두 방법 모두 사용 가능하며 동일한 결과

x = 15

# 다른 언어와 같은 방식
if x > 0 and x < 20:

# 파이썬에서만 가능한 방식
if 0 < x < 20:

🐩 반복문

while과 for가 존재하며 어느것을 사용해도 무관

  • 하지만 주로 for문이 더 간결

무한 루프(Infinite Loop)

  • 끊임없이 반복되는 구문
  • while문 사용 시 주의

🦴 continue

반복문에서 남은 코드의 실행을 건너뛰고 다음 반복 진행을 원할 때

result = 0

for i in range(1, 10):
	if i % 2 == 0:
    	continue:
    result += i
    
print(result)
# 25

🦴 break

반복문 탈출

🐩 함수

특정한 작업을 하나의 단위로 묶어 중복 제거

  • 내장 함수
  • 사용자 정의 함수

🐾 사용자 정의 함수

기본 형태

  • 매개변수(parameter), 반환값(return)
def 함수명(매개변수):
	실행할 소스코드
    return 반환값

인자

  • 함수를 호출할 때 넣는 값
print("hello")
# hello가 인자

🦴 파라미터 지정하기

  • 파라미터의 변수를 직접 지정할 수 있다
def add(a, b):
	print(a+b)
    
add(a = 3, b = 7)
  • 매개변수의 순서가 달라도 상관없다
add(b = 7, a = 3)

🦴 global 키워드

  • 일반 C언어 계열의 언어들은 함수 내에 변수 선언이 없으면 함수 밖의 글로벌 변수를 가져와 사용한다
a = 0
def func():
	a += 1
print(a)
# 1
  • 하지만 Python은 이처럼 지역변수 선언없이 함수 바깥에 선언된 변수를 사용하고 싶을 경우 global 변수를 지정해줘야 한다
a = 0
def func():
	global a	# global 변수 지정 필요
	a += 1
print(a)
# 1

리스트

  • 리스트의 경우는 global 변수로 지정 안 해도 함수 바깥 변수를 참조한다
array = [1, 2, 3, 4]

def func():
	array.append(5)
    print(array)

func()
# [1, 2, 3, 4, 5]
  • 하지만 global 변수와 같은 이름의 지역변수를 선언시 지역변수를 우선으로 참조
array = [1, 2, 3, 4]

def func():
	array = [1, 3]
    array.append(5)
    print(array)

func()
# [1, 3, 5]

🐾 여러개의 return

  • 패킹 - 반환값들이 한번에 묶여서 리턴되는 것
def operator(a, b):
	add = a + b
    subtract = a - b
    multiply = a * b
    divide = a / b
    return add subtract multiply divide
  • 언패킹 - 반환된 값들을 변수에 하나씩 담는 것
a, b, c, d = operator(6, 3)
print(a, b, c, d)
# 9, 3, 18, 2

🐾 함수의 람다 표현식

  • 한 줄로 표현하는 간단한 함수 정의 방법
  • 내장 함수에서 특정 기능을 수행하는 일회용 함수로 자주 사용된다
# 일반 함수
def add(a, b):
  return a + b
print(add(3, 7))


# lambda 표현식
print((lambda a, b: a + b)(3, 7))
  • 구현방법
(lambda `매개변수`: `소스코드(반환값)`)(`인자`)

🦴 map함수와 사용

  • a와 b를 인자로 받았을 대 그 합을 반환하는 함수
  • 그 함수를 list1과 list2에 적용
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]

🦴 sorted() with key

  • array를 key를 기준으로 sort
  • key에 바로 함수 삽입
array = [('Apple', 5), ('Banana', 10), ('Kiwi', 3)]
def number(x):
  return x[1]


print(sorted(array, key=number))
# [('Kiwi', 3), ('Apple', 5), ('Banana', 10)]
print(sorted(array, key=lambda x: x[1]))
# [('Kiwi', 3), ('Apple', 5), ('Banana', 10)]

🐩 표준 라이브러리

라이브러리설명
내장 함수기본 입출력 함수부터 정렬 함수까지 필수적인 기본적인 함수들
itertools반복되는 형태의 데이터를 처리하기 위한 유용한 기능들 (순열, 조합 등이 자주 사용됨)
heapq힙 자료구조 제공 (일반적으로 우선순위 큐 기능을 구현하기 위해 사용)
bisect이진 탐색(Binary Search)기능 제공
collections덱(deque), 카운터(Counter)등의 자료구조 포함
math수학적 기능 제공 (팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수, 파이(pi) 등)

🐾 내장 함수

🦴 sum()

result = sum([1, 2, 3, 4, 5])
print(result)
# 15

🦴 min(), max()

min_result = min([7, 3, 5, 2])
max_result = max([7, 3, 5, 2])
print(min_result, max_result)
# 2 7

🦴 eval()

입력한 수식을 계산한 결과를 반환해주는 함수

result = eval("(3+5)*7")
print(result)
56

🦴 sorted()

리스트와 같은 반복가능한 객체를 정렬하는 함수

result = sorted([9, 1, 8, 5, 4])
reverse = sorted([9, 1, 8, 5, 4], reverse=True)
print(result)
print(reverse)
# [1, 4, 5, 8, 9]
# [9, 8, 5, 4, 1]

🦴 sorted() with key

array = [('Apple', 5), ('Banana', 10), ('Kiwi', 3)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)
# [('Banana', 10), ('Apple', 5), ('Kiwi', 3)]

🐾 itertools

모든 경우의 수를 고려해야 할 때 사용하는 라이브러리

🦴 permutations() 순열

서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열

from itertools import permutations

data = ['A', 'B', 'C']

result = list(permutations(data, 2))
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

🦴 combinations() 조합

서로 다른 n개에서 순서에 상관 없이 서로 다른 r개를 선택하는 것

from itertools import combinations

data = ['A', 'B', 'C']

result = list(combinations(data, 2))
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C')]

🦴 product() 중복 순열

n개에서 r개를 선택하여 일렬로 나열 (중복 허용)

  • repeat 사용
from itertools import product

data = ['A', 'B', 'C']

result = list(product(data, repeat=2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]

🦴 combinations_with_replacement() 중복 조합

n개에서 순서에 상관 없이 r개를 선택하는 것 (중복 허용)

from itertools import combinations_with_replacement

data = ['A', 'B', 'C']

result = list(combinations_with_replacement(data, 2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]

🐾 Collections

🦴 Counter()

원소의 등장 횟수를 세는 함수

from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(counter['blue'])
# 3

🦴 dict()

리스트와 같은 반복 가능한(iterable) 객체가 주어졌을 때 내부 원소가 각각 몇 번 등장했는지 세어준다

  • 사전 형태로 반환
from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(dict(counter))
# {'red': 2, 'blue': 3, 'green': 1}

🐾 Math

🦴 gcd()

최대 공약수

import math

def lcm(a, b):
	return a * b // math.gcd(a, b)
    
a = 21
b = 14

print(math.gcd(21, 14))
# 7
print(lcm(21, 14))
# 42
profile
개발기록

0개의 댓글