Search
👨🏻‍💻

PYTHON WIKI

태그
Empty
해당 강의는 프로그래머스 사이트에 업로드 된 [ 파이썬을 파이썬답게 ] 강의의 정리 자료입니다.
실습 예시나 더 자세한 내용은 아래 사이트에서 직접 수강을 권장드립니다.

🔢 정수 활용

💡 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 형변환 함수

int() 함수는 형변환도 가능하지만, 진법 변환또한 지원한다.
기능 : 특정 진수로 형변환 된 숫자를 10진수로 형변환 할때 사용된다.
Usage : int(x,[base=10])
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

🅰️ 문자열 활용

💡 ljust, center, rjust 함수 사용

기능 : 특정문자를 좌 or 중앙 or 우측 으로 정렬한 문자열을 만들 때 사용한다.
Usage
ljust(width, [fillchar=' '])
center(width, [fillchar=' '])
rjust(width, [fillchar=' '])
Example
test = "abc" # abc!!!! temp_str = test.ljust(7,'!') print(temp_str) # !!abc!! temp_str = test.center(7,'!') print(temp_str) # !!!!abc temp_str = test.rjust(7,'!') print(temp_str)
Python

💡 string 모듈 사용

기능 : 특정 문자열들을 모아둔 상수가 정의된 모듈이다.
Example
import string # abcdef...xyz print(string.ascii_lowercase) # ABCDEF...XYZ print(string.ascii_uppercase) # string.ascii_lowercase + string.ascii_uppercase print(string.ascii_letters) # 0123456789 print(string.digits) # 0123456789abcdefABCDEF print(string.hexdigits) # 01234567 print(string.octdigits) # !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~. print(string.punctuation) # 공백으로 간주되는 ASCII 문자들(스페이스, 탭, 줄 바꿈 등) print(string.whitespace) # 인쇄 가능한 모든 ASCII 문자들 # string.digits + string.ascii_letters + string.punctuation + string.whitespace print(string.printable)
Python

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

💡 sort 함수와 sorted 함수의 차이점

sort() 함수와 sorted() 함수는 모두 리스트의 원소를 정렬하는 기능은 동일하다.
하지만 아래와 같이 큰 차이점이 있다.
sort() 함수 : 기존 리스트의 원소를 정렬함
sorted() 함수 : 기존 리스트의 원소를 정렬하지 않는다.
Example
sort() 함수 사용
testlist = [3, 2, 1] # [3, 2, 1] print(testlist) testlist.sort() # [1, 2, 3] print(testlist)
Python
sorted() 함수 사용
testlist = [3, 2, 1] # [3, 2, 1] print(testlist) templist = sorted(testlist) # [3, 2, 1] -> 원본은 정렬되지 않음 print(testlist) # [1, 2, 3] print(templist)
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(*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

💡 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

🔎 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 ( 순회할 수 있는 값 )]
[element for array in my_list for element in array]
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
permutations(iterable, [r])
💡
원소의 값은 같지만, 순서만 다른 경우도 구함
r 값을 정의하지 않았다면 iterable 의 원소 갯수와 같은 순열을 구한다.
combinations(iterable, r)
💡
값이 다른 원소들의 조합만을 구한다.
r 값을 무조건 작성해야 함(입력 하지 않을 시 에러)
Example
items = ['1', '2', '3', '4', '5'] from itertools import permutations # [('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), # ('2', '1'), ('2', '3'), ('2', '4'), ('2', '5'), # ('3', '1'), ('3', '2'), ('3', '4'), ('3', '5'), # ('4', '1'), ('4', '2'), ('4', '3'), ('4', '5'), # ('5', '1'), ('5', '2'), ('5', '3'), ('5', '4')] print(list(permutations(items, 2))) from itertools import combinations # [('1', '2'), ('1', '3'), ('1', '4'), ('1', '5'), # ('2', '3'), ('2', '4'), ('2', '5'), ('3', '4'), # ('3', '5'), ('4', '5')] print(list(combinations(items, 2)))
Python

💡 가장 많이 등장하는 값 찾기

기능 : 특정 원소가 iterable에서 몇개씩 존재하는지 확인할 때 사용된다. 원소의 종류가 다양할 때 매우 유용하다.
Return : collections.Counter 클래스
dict 함수로 각 원소와 존재 개수를 dict 형태로 확인할 수 있다.
Usage : dict(collections.Counter(iterable))
💡
또한, collections.Counter(iterable) 의 결과에 items() 함수를 사용하면 KEY, VALUE로 나누어 원소와 그 원소의 값을 편하게 확인할 수 있다.
Example
import collections my_list = [1, 2, 3, 4, 5, 6, 7, 8, 7, 9, 1, 2, 3, 3, 5, 2, 6, 8, 9, 0, 1, 1, 4, 7, 0] # {1: 4, 2: 3, 3: 3, 4: 2, 5: 2, 6: 2, 7: 3, 8: 2, 9: 2, 0: 2} print(dict(collections.Counter(my_list))) # key: 1, value: 4 # key: 2, value: 3 # key: 3, value: 3 # key: 4, value: 2 # key: 5, value: 2 # key: 6, value: 2 # key: 7, value: 3 # key: 8, value: 2 # key: 9, value: 2 # key: 0, value: 2 for key,value in collections.Counter(my_list).items(): print("key: {}, value: {}".format(key, value))
Python

🙌 기타 여러가지

💡 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
TOP