Search

PYTHON 기본 문법 정리

목차

수학 내장 함수

sum 함수

기능 : 반복 가능한 자료형(iterable)의 원소들 값들을 모두 더하여 반환한다.
iterable 자료형의 내부는 숫자로만 원소가 구성되어야한다.
Usage : sum(iterable, start=num)
start 인자는 추가적으로 시작 시 더해줄 값
Return : num (원소들의 합)
Example
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 55 print(sum(nums)) # 60 print(sum(nums, start=5))
Python

divmod 함수

큰 숫자를 다룰때는 divmod 함수의 속도가 빠르지만, 작은 숫자를 다룰때는 a//b , a%b 와 같은 방법이 더 빠르다.
기능 : 두 숫자의 몫과 나머지를 한번에 구할 때 사용
Usage : divmod([int / float], [int / float])
Return : tuple (몫, 나머지)
Example
num1 = 5 num2 = 3 # (1, 2) print(divmod(num1, num2)) # <class 'tuple'> print(type(divmod(num1, num2))) # 1, 2 print(*divmod(num1, num2))
Python

int 형변환 함수

기능 : 특정 진수로 형변환 된 숫자를 10진수로 형변환 할때 사용된다.
Usage : int(x,[base=10])
int() 함수는 형변환도 가능하지만, base 인자를 사용하여 진법 변환또한 지원한다.
Return : 변환된 숫자
Example
num = '1234' base = 5 # 5진법으로 작성된 1234 숫자가 10진법으로 변환된다. answer = int(num,base) # 16진수로 작성된 0x123 값이 10진수로 변환된다. int('0x123',16) # 8진수로 작성된 0o1234 값이 10진수로 변환된다. int('0o1234',8) # 2진수로 작성된 0b1010101 값이 10진수로 변환된다. int('0b1011101101',2)
Python

max / min 함수

기능 : 반복 가능한 자료형(iterable) 또는 인자로 삽입된 숫자들 중 가장 크거나 작은 값을 구한다.
iterable 자료형의 내부는 숫자로만 원소가 구성되어야한다.
문자로 넣어도 결과는 나오지만, 이상하게 나온다. 가급적 숫자로 하도록 하자
Usage
max(iterable) / min(iterable)
max(num1, num2, num3, ...) / min(num1, num2, num3, ...)
Return
max() 함수일 경우 : 가장 큰 값
min() 함수일 경우 : 가장 작은 값
Example
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 10 print(max(nums)) # 17 print(max(1, 3, 4, 17, 16, 13))
Python

round 함수

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

abs() 함수

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

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에서는 특정 키 값에 - 를 붙어 일부 키 값만 역으로 혹은 정방향으로 정렬할 수 있다.
testlist = [[3, 300], [1, 200], [1, 100], [3, 500], [2, 100]] # 1순위 : 첫번째 원소 값 오름차순 # [[1, 200], [1, 100], [2, 100], [3, 300], [3, 500]] print(sorted(testlist, key=lambda x: (x[0]))) # 1순위 : 첫번째 원소 값 내림차순(reverse) # [[3, 300], [3, 500], [2, 100], [1, 200], [1, 100]] print(sorted(testlist, key=lambda x: (x[0]), reverse=True)) # 1순위 : 첫번째 원소 값 오름차순 # 2순위 : 1순위가 같을 경우, 두 번째 원소가 큰 item이 먼저 오도록 설정 # [[1, 200], [1, 100], [2, 100], [3, 500], [3, 300]] print(sorted(testlist, key=lambda x: (x[0], -x[1])))
Python

zip 함수

기능 : 인자로 입력된 iterables(list, tuple, str 등) 의 요소들을 모은 새로운 iterables를 반환한다.
만약 인자수가 달라서 인자가 없는 상황이 생기면, 빈 iterator를 반환
Return : zip object
Usage : zip(iterables)
Example
list1 = [1, 2, 3] list2 = [100, 200, 300] # [(1, 100), (2, 200), (3, 300)] print(list(zip(list1,list2))) # (1, 100) # (2, 200) # (3, 300) for item in zip(list1, list2): print(item)
Python
list1 = [1, 2, 3, 4] list2 = [100, 120, 30, 300] list3 = [392, 2, 33, 1] answer = [] for i, j, k in zip(list1, list2, list3): print(i) # 1 2 3 4 print(j) # 100 120 30 300 print(k) # 392 2 33 1 # mylist[1:] 등을 사용하여 새로운 리스트를 만들지 않고 기존 원소에 접근 가능 # mylist[x+1]과 mylist[x] 의 차이 구하기 예시 for number1, number2 in zip(mylist, mylist[1:]): answer.append(abs(number1 - number2))
Python
animals = ['cat', 'dog', 'lion'] sounds = ['meow', 'woof', 'roar'] # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'} answer = dict(zip(animals, sounds))
Python
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
def over_ten(num): if num > 10: return 'Y' else: return 'N' testlist = [1, 4, 16, 20, 45, 0] result = list(map(over_ten,testlist)) # ['N', 'N', 'Y', 'Y', 'Y', 'N'] print(result)
Python
testlist = ["world","wow","haha"] result = list(map(lambda x: "Hello" + x, testlist)) # ['Helloworld', 'Hellowow', 'Hellohaha'] print(result)
Python

 iterable 객체의 조건 검사

인자로 받은 iterable 객체 중 특정 조건이 만족하는 객체가 존재하는지 확인
any(iterable) : 각 원소 중 참인 값이 존재하는지 확인한다.
all(iterable) : 모든 원소가 참인 값인지 확인한다.
Example
숫자 0도 False로 취급한다.
x = 5 test = [3,5,7,8,9] iterable = [x > item for item in test] # True print(any(iterable)) # False print(all(iterable)) # False print(all(range(5)) # True print(all(range(1, 5))
Python

 기본 값을 설정할 수 있는 Dict

defaultdict 를 사용하면, 키를 추가했을 때 데이터의 기본 값을 설정할 수 있다.
사용법 : defaultdict(default_factory=None,/[, ...])
defaultdict(list) / defaultdict(int) / defaultdict(set) ...
예시

Sequence Types 활용

join 함수 활용

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

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
for i in range(10): if i%2 == 0: print("break!") break # break가 동작하여 빠져나왔을때는 동작하지 않는다. else: print("loop end")
Python
Mylist = [1, 2, 3, 4, 5] for item in Mylist: if type(i) != int: print("Not int Type!") break else: print("All item type is int!")
Python

두 변수의 값 바꾸기

두 변수의 값을 바꾸기 위해 temp 등의 변수를 만들어 임시 저장을 하는 방법으로 변수를 바꾼다.
하지만 아래와 같이 사용하면 Python에서는 쉽게 두 변수의 값을 바꿀 수 있다.
Example
value1 = "HELLO" value2 = 10000 # Before swap - value1: HELLO, value2: 10000 print("Before swap - value1: {}, value2: {}".format(value1, value2)) # swap value1, value2 = value2, value1 # After swap - value1: 10000, value2: HELLO print("After swap - value1: {}, value2: {}".format(value1, value2))
Python
value1 = "HELLO" value2 = 10000 value3 = True # Before swap - value1: HELLO, value2: 10000, value3: True print("Before swap - value1: {}, value2: {}, value3: {}".format(value1, value2, value3)) # swap value1, value2, value3 = value2, value3, value1 # After swap - value1: 10000, value2: True, value3: HELLO print("After swap - value1: {}, value2: {}, value3: {}".format(value1, value2, value3))
Python

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

매번 이진탐색 알고리즘을 작성하는것은 비효율적이기 때문에, 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
bisect.bisect_leftbisect.bisect_right 의 차이 예시
import bisect # 3값은 인덱스 2에 존재 mylist = [1, 2, 3, 7, 9, 11, 33] # 2 print(bisect.bisect_left(mylist, 3)) # 3 -> (2+1) 반환 print(bisect.bisect_right(mylist, 3))
Python
기존 리스트에 없는 값의 인덱스를 구하기
import bisect mylist = [1, 2, 3, 7, 9, 11, 33] # 2 # 오름차순일때, 인덱스가 1인 값 2보다 크기 때문에 2 반환 # [1, 2, 3, 7, 9, 11, 33] -> [1, 2, 2.5, 3, 7, 9, 11, 33] print(bisect.bisect(mylist, 2.5)) # 오름차순일때, 인덱스가 3인 값 2보다 크기 때문에 4 반환 # [1, 2, 3, 7, 9, 11, 33] -> [1, 2, 3, 7, 8, 9, 11, 33] print(bisect.bisect(mylist, 8))
Python

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

클래스를 사용할 때 __init__ 함수를 사용하여 초기화해주면 인스턴스를 만들때 호출이 된다.
이렇게 만들어진 인스턴스는 그냥 출력 시, 오브젝트 형태로 출력된다.
이때 __str__ 함수를 사용하면 인스턴스가 출력 시 문자열화 되도록 만들어줄 수 있다.
Example
__str__ 함수를 사용하지 않았을 경우
class test: def __init__(self,a,b): self.a = a self.b = b test1 = test(1,2) # <__main__.test object at 0x0000021C00DFFFD0> # object 형태로 출력된다. print(test1)
Python
__str__ 함수를 사용하였을 경우
class test: def __init__(self,a,b): self.a = a self.b = b def __str__(self): return "test.a: {}, test.b: {}".format(self.a, self.b) test1 = test(1,2) # test.a: 1, test.b: 2 # object 값이 아닌 __str__ 함수로 정의된 문자열이 출력된다. print(test1)
Python

파이썬에서 가장 큰 수는 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
타입 파이썬! 올바른 class 사용법과 객체지향 프로그래밍
Open
강의
https://www.inflearn.com/course/%ED%83%80%EC%9E%85-%ED%8C%8C%EC%9D%B4%EC%8D%AC#
COUNT2