Search

PYTHON 기본 문법 정리

목차

수학 내장 함수

sum 함수

기능 : 반복 가능한 자료형(iterable)의 원소들 값들을 모두 더하여 반환한다.
iterable 자료형의 내부는 숫자로만 원소가 구성되어야한다.
Usage : sum(iterable, start=num)
start 인자는 추가적으로 시작 시 더해줄 값
Return : num (원소들의 합)
Example

divmod 함수

큰 숫자를 다룰때는 divmod 함수의 속도가 빠르지만, 작은 숫자를 다룰때는 a//b , a%b 와 같은 방법이 더 빠르다.
기능 : 두 숫자의 몫과 나머지를 한번에 구할 때 사용
Usage : divmod([int / float], [int / float])
Return : tuple (몫, 나머지)
Example

int 형변환 함수

기능 : 특정 진수로 형변환 된 숫자를 10진수로 형변환 할때 사용된다.
Usage : int(x,[base=10])
int() 함수는 형변환도 가능하지만, base 인자를 사용하여 진법 변환또한 지원한다.
Return : 변환된 숫자
Example

max / min 함수

기능 : 반복 가능한 자료형(iterable) 또는 인자로 삽입된 숫자들 중 가장 크거나 작은 값을 구한다.
iterable 자료형의 내부는 숫자로만 원소가 구성되어야한다.
문자로 넣어도 결과는 나오지만, 이상하게 나온다. 가급적 숫자로 하도록 하자
Usage
max(iterable) / min(iterable)
max(num1, num2, num3, ...) / min(num1, num2, num3, ...)
Return
max() 함수일 경우 : 가장 큰 값
min() 함수일 경우 : 가장 작은 값
Example

round 함수

기능 : 소수 값을 반올림할 때 사용하는 함수이다.
Usage : round(float, n)
n 위치에 몇 번째 자리까지만 반올림할 건지 설정할 수 있다.
Return : 반올림 처리 된 값 반환
Example

abs() 함수

기능 : 입력한 숫자의 절대 값을 구하는 함수이다.
Usage : abs(num)
Return : 입력한 숫자(num)의 절대 값이 반환된다.
Example

gcd(), lcm() 함수

기능 : 입력한 두 숫자의 최대 공약수와 최소 공배수를 구하는 함수
두 숫자까지만 입력을 받을 수 있기 때문에, 만약 3개 이상의 숫자들의 결과를 구하기 위해서는 직접 함수를 구현해야한다.
Usage
최대 공약수 : gcd(num1, num2)
최소 공배수 : lcm(num1, num2)
Return
gcd() 함수 일 경우 : 최대 공약수 반환
lcm() 함수 일 경우 : 최소 공배수 반환

문자열 활용

좌, 중앙, 우측 정렬

기능 : 특정문자열을 좌 or 중앙 or 우측 으로 정렬한 문자열을 만들 때 사용한다.
Usage
ljust(width, [fillchar=' '])
특정문자를 왼쪽으로 정렬, 길이보다 문자열이 짧을경우 fillchar 값으로 채운다.
center(width, [fillchar=' '])
특정문자를 중앙으로 정렬, 길이보다 문자열이 짧을경우 fillchar 값으로 채운다.
rjust(width, [fillchar=' '])
특정문자를 오른쪽으로 정렬, 길이보다 문자열이 짧을경우 fillchar 값으로 채운다.
Return : str(정렬된 문자)
Example

문자열 역으로 정렬

기능 : 특정 문자열이나 리스트를 역으로 뒤집는다.
Usage
str[::-1] : 문자열(str)을 역으로 뒤집는다.
list[::-1] : 리스트(list)를 역으로 뒤집는다.
list.reverse() : 리스트(list)를 역으로 뒤집는다. → 원본 리스트가 변경되며, 리스트만 지원
Return : str(뒤집힌 문자), list(뒤집힌 리스트)
Example

string 모듈 사용

기능 : 특정 문자열들을 모아둔 상수가 정의된 모듈이다.
Example

 문자의 구성 값 확인

기능 : 문자열이 특정 문자로만 이루어져 있는지 확인하기 위함
str.isalpha() : 해당 문자가 알파벳 혹은 한글로만 이루어져 있는지 확인
str.isalnum() : 해당 문자가 알파벳 혹은 한글 혹은 숫자로만 이루어져 있는지 확인
str.isdigit() : 해당 문자가 숫자로만 이루어져 있는지 확인

 특정 문자열 확인

기능 : 문자열에 특정 문자/문자열이 있는지 확인
re.findall(정규식, 문자열) : 문자열에 해당 정규식에 맞는 모든 문자 반환
re.sub(정규식, 대체문자, 문자열) : 문자열에 해당 정규식에 맞는 문자를 대체문자로 변경 후 반환
str.startswith(문자열 또는 문자열로 이루어진 튜플) : 해당 문자열이 특정 문자로 시작하는지 확인

 조건에 맞게 재정렬

기능 : 특정 조건에 따라 문자를 재정렬한다. → 각 원소의 형태가 모두 동일해야한다.
sort + func / sort + lambda : 특정 문자를 기준으로 원소들을 정렬한다.

객체 활용 (list, str, tuple, dictionary 등)

sort 함수와 sorted 함수를 이용한 정렬

sort() 함수와 sorted() 함수는 모두 리스트의 원소를 정렬할 수 있다는 점은 동일하다.
하지만 sort리스트형의 메소드이며, sorted()는 파이썬의 내장함수인점에서 완전히 다른 것 입니다.
sort 메소드
sorted() 함수
sort 메소드와 sorted 함수는 둘 다 key인자를 사용하여 정렬 조건을 선택할 수 있다.
key에는 lambda 혹은 함수를 사용한다.
Example(sort + func)
Example(sort + lambda)
이때 reverse 인자를 사용하면 정렬된 결과를 거꾸로 정렬하며 반환한다.
또한 lambda에서는 특정 키 값에 - 를 붙어 일부 키 값만 역으로 혹은 정방향으로 정렬할 수 있다.
Example(reverse option)

zip 함수

기능 : 인자로 입력된 iterables(list, tuple, str 등) 의 요소들을 모은 새로운 iterables를 반환한다.
만약 인자수가 달라서 인자가 없는 상황이 생기면, 빈 iterator를 반환
Return : zip object
Usage : zip(iterables)
Example
list(zip(*2차원 배열))[index] → 2차원 배열에서 특정 인덱스를 얻을 수 있음
test = [[1, "one"], [2, "two"], [3, "three"]] # 2차원 배열에서 1번째 인덱스만 모은 배열을 얻을 수 있다. print(list(zip(*test))[1])
Python
복사

map 함수 활용

기능 : iterables(list, tuple, str 등) 데이터를 인자로 같이 입력받은 함수를 적용하여 다른 형태의 데이터로 반환할 때 사용한다.
Usage : map(func, iterables)
func 부분에는 lambda를 사용한 함수를 정의해도 된다.
Return : map object
Example

 iterable 객체의 조건 검사

인자로 받은 iterable 객체 중 특정 조건이 만족하는 객체가 존재하는지 확인
any(iterable) : 각 원소 중 참인 값이 존재하는지 확인한다.
all(iterable) : 모든 원소가 참인 값인지 확인한다.
Example

 딕셔너리의 생성 시, 기본 값을 설정할 수 있는 defaultdict

defaultdict 를 사용하면, 키를 추가했을 때 데이터의 기본 값을 설정할 수 있다.
보통은 형식을 설정하여 기본값을 지정하지만, lambda 를 사용하면 원하는 값으로 설정도 가능하다.
사용법 : defaultdict(default_factory=None,/[, ...])
defaultdict(list) / defaultdict(int) / defaultdict(set) ...
Example
또한 아래와 같이 이중으로 defaultdict를 사용할 수 도 있다.
defaultdict(lambda: defaultdict(int))
dict[a][b] 와 같이 이중 dict를 사용할 수 있다.
Example

 원소가 존재하는 딕셔너리 사용 시, 기본 값을 사용할 수 있는 setdefault

딕셔너리의 setdefault를 사용하면 원소 존재 여부에 따라 value를 받거나 추가하는 동작을 진행할 수 있다.
DJango를 많이 사용하여, 비슷한 ORM을 예시로 들자면 get_or_create 느낌이라고 생각하면 된다.
Example

Sequence Types 활용

join 함수 활용

기능 : 리스트의 요소들을 특정 문자를 기준문자로 설정하여 하나의 문자열로 만든다.
Usage : "[str]".join([list])
기준 문자를 설정하지 않으면 기준 문자 없이 하나의 문자열로 만들 수 있다.
Example

Itertools / Collections 모듈

product 함수 사용 [Itertools module]

기능 : 여러 iterable가 존재할 때, 각 원소들의 곱집합을 반복문 없이 구할 수 있다.
Return : itertools.product object
Example
import itertools iterable1 = 'AB' iterable2 = 'xy' iterable3 = '123' result = itertools.product(iterable1, iterable2, iterable3) # ('A', 'x', '1') ('A', 'x', '2') ('A', 'x', '3') ('A', 'y', '1') ('A', 'y', '2') # ('A', 'y', '3') ('B', 'x', '1') ('B', 'x', '2') ('B', 'x', '3') ('B', 'y', '1') # ('B', 'y', '2') ('B', 'y', '3') print(*result)
Python
복사

2차원 리스트를 1차원 리스트로 만들기

이차원리스트를 일차원 리스트로 만들어주는 여러 방법들이다.
각 예시들의 my_listmy_list = [[1, 2], [3, 4], [5, 6]] 이다.
sum() 함수 사용
리스트(첫번째 인자)의 요소들을 오른쪽 리스트에 더하여 반환한다.
answer = sum(my_list, [])
Python
복사
itertools 모듈의 chain 사용
import itertools # itertools.chain list(itertools.chain.from_iterable(my_list)) # itertools와 unpacking list(itertools.chain(*my_list))
Python
복사
list comprehension 사용
list comprehension 문법 → [ ( 변수를 활용한 값 ) for ( 사용할 변수 이름 ) in ( 순회할 수 있는 값 )]
my_list = [[1, 4], [3, 4], [3, 10]] # [1, 4, 3, 4, 3, 10] print([element for array in my_list for element in array]) # [1, 3, 3] print([one for one, two in my_list])
Python
복사
list(zip(*2차원 배열))[index] → 2차원 배열에서 특정 인덱스를 얻을 수 있음
test = [[1, "one"], [2, "two"], [3, "three"]] # 2차원 배열에서 1번째 인덱스만 모은 배열을 얻을 수 있다. print(list(zip(*test))[1])
Python
복사
reduce() 함수 사용
# reduce 함수 이용1 from functools import reduce list(reduce(lambda x, y: x+y, my_list)) # reduce 함수 이용2 from functools import reduce import operator list(reduce(operator.add, my_list))
Python
복사
numpy 라이브러리의 flatten 이용
이 방법은 각 원소의 길이가 아래와 같이 동일한 경우에만 사용이 가능하다. 가능 EX) [[1, 2], [2, 3], [4, 5]] 불가능 EX) [[1, 2], [2], [4, 5]]
import numpy as np np.array(my_list).flatten().tolist()
Python
복사

순열과 조합 만들기

기능 : iterable의 원소들로 순열과 조합을 만들 수 있다.
Return : itertools.permutations / itertools.combinations 클래스
* 혹은 for문 으로 값 확인 가능
Usage
Example

 특정 원소 갯수 확인

기능 : 특정 원소가 iterable에서 몇개씩 존재하는지 확인할 때 사용된다. 원소의 종류가 다양할 때 매우 유용하다.
Return : collections.Counter 클래스
dict 함수로 각 원소와 존재 개수를 dict 형태로 확인할 수 있다.
Usage : dict(collections.Counter(iterable))
또한, collections.Counter(iterable) 의 결과에 items() 함수를 사용하면 KEY, VALUE로 나누어 원소와 그 원소의 값을 편하게 확인할 수 있다.
Example

 특정 원소의 빈도수 확인

기능 : Counter 클래스를 사용하여 반환된 counter_dict를 이용해 빈도 수를 기준으로 원소를 정렬하고 횟수를 확인한다.
Usage : counter_dict.most_common()
Return : List → [(원소, 갯수), (원소, 갯수) ... ]
Example

기타 여러가지

Python comprehension 구문

기능 : 입력 Sequence로 부터 지정된 표현식에 따라 간편하게 원하는 컬렉션을 만들 수 있다.
Usage
LIST : [출력표현식 for 요소 in 입력Sequence [if 조건식]]
SET : {출력표현식 for 요소 in 입력Sequence [if 조건식]}
SET은 중복을 허용하지 않고, 요소의 순서를 보장하지 않기 때문에 중복이 제거되고 순서가 랜덤하게 바뀐 결과를 출력해준다.
Dict : {Key:Value for 요소 in 입력Sequence [if 조건식]}
출력표현식이 Key:value 로 표현되며, 결과가 dict로 리턴된다.
Example
List sequence
Set sequence
Dict sequence
TIP
간단한 함수는 return 하면서 아래와 같이 조건을 만들 수 있다.
# sorted(~) list가 생성되지 않는다면 [-1]을 반환 return sorted([n for n in arr if n % divisor == 0]) or [-1]
Python
복사

for - else 구문

일반적으로 For구문IF문과 많이 사용되지만, Python은 For문과도 사용할 수 있다.
이 Else 문은 For문이 break 등이 동작하지 않고 루프를 마친 후 정상적으로 빠져나왔을 때만 동작한다.
Example

두 변수의 값 바꾸기

두 변수의 값을 바꾸기 위해 temp 등의 변수를 만들어 임시 저장을 하는 방법으로 변수를 바꾼다.
하지만 아래와 같이 사용하면 Python에서는 쉽게 두 변수의 값을 바꿀 수 있다.
Example

이진 탐색 함수로 인덱스 위치 구하기

매번 이진탐색 알고리즘을 작성하는것은 비효율적이기 때문에, bisect 모듈을 사용할 수 있다.
이진 탐색이란? 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘으로, 검색속도가 빠른편이다.
Usage
value 값이 리스트에서 오름차순일때 몇번째 인덱스에 존재해야되는지 반환하는것이 주 목적이다.
bisect.bisect(list, value) / bisect.bisect_right(list, value)
bisect.bisect는 기본적으로 right다.
bisect.bisect_left(list, value)
bisect.bisect_left와 bisect.bisect_left의 차이점은 무엇일까? list 안에 value 값과 똑같은 요소가 존재할 때 동작차이이다. bisect.bisect_left는 동일한 요소값의 인덱스 값을 반환한다. bisect.bisect_right는 동일한 요소값의 (인덱스 값+1)을 반환한다.
Example

클래스의 인스턴스 출력하기

클래스를 사용할 때 __init__ 함수를 사용하여 초기화해주면 인스턴스를 만들때 호출이 된다.
이렇게 만들어진 인스턴스는 그냥 출력 시, 오브젝트 형태로 출력된다.
이때 __str__ 함수를 사용하면 인스턴스가 출력 시 문자열화 되도록 만들어줄 수 있다.
Example

파이썬에서 가장 큰 수는 inf 이다.

코딩테스트 문제를 풀 때, 초기 임시 변수에 가장 큰 값 or 가장 작은 값을 할당하는 경우가 있다.
보통은 자신이 아는 가장 큰 수(99999999~)를 사용하지만, inf 를 사용하면 어떤 숫자와 비교해도 무조건 크다고 판단하기 때문에 임의의 수를 할당할 필요가 없다.
Usage
가장 큰 수 : float('inf')
가장 작은 수 : float('-inf')
Example
if float('inf') > 999999999999999: print("float is largest number!") if float('-inf') < -999999999999999: print("float is smallest number!")
Python
복사

파일 입출력 간단하게 하기

파이썬에서는 with - as 블록으로 파일을 더 간단하게 다룰 수 있다.
file이 블록 종료 시 자동으로 close 되며, readlines와 함께 사용 시, EOF도 체크할 필요가 없다.
Example
# myfile.txt 파일이 블록 종료 후 자동으로 close 된다. with open('myfile.txt') as file: # readlines() 함수를 사용하여 EOF까지만 읽기 때문에, EOF를 체크하지 않아도 된다. for line in file.readlines(): print(line.strip())
Python
복사

 에러 해결

json.decoder.JSONDecodeError 해결

json.loads() 를 사용할 때 발생하는 에러이다.
만약 json.loads()로 변환하는 값이 json값이 아니거나, None이면 발생한다.
본인의 경우 None값을 변환하려고 하여 에러가 발생하였는데, 에러의 마지막 줄의 바로 윗줄을 확인해보니 None 값을 변환하려고 하여 에러가 발생했었던 것을 알 수 있었다.
아래 코드처럼 JSONDecodeError 에 대한 에러를 처리해줘야 한다.
아니면 변환하는 값이 json 형태이며, None 값이 아닌지 검증하는 코드를 추가하는 방법도 있다.
import json try: ... json.loads(value) ... # json.loads() 실패 시 에러 처리 except JSONDecodeError: # Error 처리
Python
복사

참고

이름
태그
URL
COUNT2