파트1. Python 꿀팁
def solution(mylist):
answer = [len(i) for i in mylist]
return answer
↓
def solution(mylist):
return list(map(len, mylist))
파트2. 정수 다루기
1. 몫과 나머지 - divmod
divmod를 사용하면 한번에 구할수 있음! ( 작은 숫자 다룰때는 divmod가 느림, 큰수는 빠름!)
print(*divmod(a, b))
# print(a//b, a%b) 랑 같음
2. n진법 string -> 10진법 숫자 - int()
int(x, base=10) 함수 사용!
num = '1234'
base = 5
answer = int(num, base)
파트3. Str 다루기
1. 문자열 정렬하기 - ljust, center, rjust (좌측/가운데/우측)
s = '가나다라'
n = 7
s.ljust(n) # 좌측 정렬 '가나다라 '
s.center(n) # 가운데 정렬 ' 가나다라 '
s.rjust(n) # 우측 정렬 ' 가나다라'
2. 알파벳 출력하기 - string 모듈
import string
string.ascii_lowercase # 소문자 abcdefghijklmnopqrstuvwxyz
string.ascii_uppercase # 대문자 ABCDEFGHIJKLMNOPQRSTUVWXYZ
string.ascii_letters # 대소문자 모두 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
string.digits # 숫자 0123456789알파벳 출력하기 - string 모듈
파트4. Iterable 다루기
Iterable : 자신의 멤버를 한번에 리턴할 수 있는 객체 ex) list, str, tuple, dictionary 등
1. 원본을 유지한채, 정렬된 리스트 구하기 - sorted
list1 = [3, 2, 1]
list2 = sorted(list1)
# 유지안하고 정렬-> sort(list1)
2. 2차원 리스트 뒤집기 - ⭐️zip⭐️
mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = [[], [], []]
for i in range(len(mylist)):
for j in range(len(mylist[i])):
new_list[i].append(mylist[j][i])
# new_list : [[1, 4, 7], [2, 5, 8], [3, 6, 9]]
↓ 파이썬의 zip과 unpacking -> 리스트를 뒤집을 수 있음
mylist = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
new_list = list(map(list, zip(*mylist)))
+) zip ??
zip(*iterables)는 각 iterables 의 요소들을 모으는 이터레이터를 만든다.
튜플의 이터레이터를 돌려주는데, i 번째 튜플은 각 인자로 전달된 시퀀스나 이터러블의 i 번째 요소를 포함1) 두 리스트를 각 인덱스별로 묶어줌.
mylist = [1, 2, 3] new_list = [40, 50, 60] for i in zip(mylist, new_list): print (i) (1, 40) (2, 50) (3, 60)
2) 여러개의 Iterable 동시에 가능
list1 = [1, 2, 3, 4] list2 = [100, 120, 30, 300] list3 = [392, 2, 33, 1] answer = [] for number1, number2, number3 in zip(list1, list2, list3): print(number1 + number2 + number3)
3) 두개의 리스트를 각각 key, value로 하여 딕셔너리 생성 가능
animals = ['cat', 'dog', 'lion'] sounds = ['meow', 'woof', 'roar'] answer = dict(zip(animals, sounds)) # {'cat': 'meow', 'dog': 'woof', 'lion': 'roar'}
3. i번째 원소와 i+1번째 원소 - zip
⭐ zip 함수에 서로 길이가 다른 리스트가 인자로 들어오면 길이가 짧은 쪽 까지만 이터레이션이 이루어짐
def solution(mylist):
answer = []
for number1, number2 in zip(mylist, mylist[1:]):
answer.append(abs(number1 - number2)) # i번째와 i+1번째 원소의 차
return answer
if __name__ == '__main__':
mylist = [83, 48, 13, 4, 71, 11]
print(solution(mylist)) # [35, 35, 9, 67, 60]
4. 모든 멤버의 type 변환하기 - map
map -> for 문을 사용하지 않고도 멤버의 타입을 일괄 변환 가능
list1 = ['1', '100', '33']
list2 = list(map(int, list1))
파트5. Sequence Types 다루기
Sequence Type : int 타입 인덱스를 통해, 원소를 접근할 수 있는 iterable ex) list, str, tuple
1. sequence 멤버를 하나로 이어붙이기 - join
str.join(iterable) 사용 !!
my_list = ['1', '100', '33']
answer = ''.join(my_list)
2. 삼각형 별찍기 - sequence type의 * 연산
곱셈 연산 *를 통해 문자열,리스트 반복
n = 5
answer = 'abc' * n
# 'abcabcabcabc ...'
n = 어쩌고
answer= [123, 456] * n
# [123, 456, 123, 456, 123 ...]
파트6. Itertools / Collections 모듈
더 많은 팁 : https://realpython.com/python-itertools/
1. 곱집합(Cartesian product) 구하기 - product
import itertools
iterable1 = 'ABCD'
iterable2 = 'xy'
iterable3 = '1234'
print(list(itertools.product(iterable1, iterable2, iterable3)))
# [('A', 'x', '1'), ('A', 'x', '2'), ('A', 'x', '3'), ('A', 'x', '4'), ('A', 'y', '1'), ('A', 'y', '2'), ('A', 'y', '3'), ('A', 'y', '4'),
# ('B', 'x', '1'), ('B', 'x', '2'), ('B', 'x', '3'), ('B', 'x', '4'), ('B', 'y', '1'), ('B', 'y', '2'), ('B', 'y', '3'), ('B', 'y', '4'),
# ('C', 'x', '1'), ('C', 'x', '2'), ('C', 'x', '3'), ('C', 'x', '4'), ('C', 'y', '1'), ('C', 'y', '2'), ('C', 'y', '3'), ('C', 'y', '4'),
# ('D', 'x', '1'), ('D', 'x', '2'), ('D', 'x', '3'), ('D', 'x', '4'), ('D', 'y', '1'), ('D', 'y', '2'), ('D', 'y', '3'), ('D', 'y', '4')]
2. 2차원 리스트를 1차원 리스트로 만들기 - from_iterable
my_list = [[1, 2], [3, 4], [5, 6]]
# 방법 1 - sum 함수
answer = sum(my_list, [])
# 방법 2 - itertools.chain
import itertools
list(itertools.chain.from_iterable(my_list))
# 방법 3 - itertools와 unpacking
import itertools
list(itertools.chain(*my_list))
# 방법 4 - list comprehension 이용
[element for array in my_list for element in array]
# 방법 5 - reduce 함수 이용 1
from functools import reduce
list(reduce(lambda x, y: x+y, my_list))
# 방법 6 - reduce 함수 이용 2
from functools import reduce
# 제한적 사용 - 각 원소 길이 동일할 경우!
# 방법 7 - numpy 라이브러리의 flatten 이용
import numpy as np
np.array(my_list).flatten().tolist()
import operator
list(reduce(operator.add, my_list))
3. 순열과 조합 - combinations, permutations
import itertools
pool = ['A', 'B', 'C']
print(list(map(''.join, itertools.permutations(pool)))) # 3개의 원소로 수열 만들기
print(list(map(''.join, itertools.permutations(pool, 2)))) # 2개의 원소로 수열 만들기
print(list(map(''.join, itertools.combinations(pool)))) # 3개의 원소로 조합 만들기
print(list(map(''.join, itertools.combinations(pool, 2)))) # 2개의 원소로 조합 만들기
4. 가장 많이 등장하는 알파벳 찾기 - Counter
collections.Counter : 어떤 원소 x가 주어진 시퀀스타입에 몇 번이나 등장하는지 세야 할 때!
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]
answer = collections.Counter(my_list)
print(answer[1]) # = 4
print(answer[3]) # = 3
print(answer[100]) # = 0
파트7. 기타
1. for 문과 if문을 한번에 - List comprehension의 if 문
mylist = [3, 2, 6, 7]
answer = [number**2 for number in mylist if number % 2 == 0]
2. flag 대신 for-else 사용하기
flag변수 사용하지 않고 for-else문으로 짧은 코드 + 알아보기 쉬움 !
import math
if __name__ == '__main__':
numbers = [int(input()) for _ in range(5)]
multiplied = 1
flag = True # flag 변수
for number in numbers:
multiplied *= number
if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
flag = False
print('found')
break
if flag: # flag 변수
print('not found')
↓
import math
if __name__ == '__main__':
numbers = [int(input()) for _ in range(5)]
multiplied = 1
for number in numbers:
multiplied *= number
if math.sqrt(multiplied) == int(math.sqrt(multiplied)):
print('found')
break
else:
print('not found')
3. 두 변수의 값 바꾸기 - swap
a = 3
b = 'abc'
a, b = b, a
4. 이진 탐색하기 - binary search
Python의 이진 탐색 모듈, bisect 사용 -> 이진탐색 코드 직접 안짜도 됨!
import bisect
mylist = [1, 2, 3, 7, 9, 11, 33]
print(bisect.bisect(mylist, 3))
5. 클래스 인스턴스 출력하기 - class의 자동 string casting
__str__ 메소드를 사용해 class 내부에서 출력 format을 지정할 수 있습니다.
class Coord(object):
def __init__ (self, x, y):
self.x, self.y = x, y
def __str__ (self):
return '({}, {})'.format(self.x, self.y)
point = Coord(1, 2)
print(point) # (1, 2)
6. 가장 큰 수, inf
inf는 어떤 숫자와 비교해도 무조건 크다고 판정됨
min_val = float('inf')
min_val > 10000000000
# 음수 기호 붙이는 것도 가능
max_val = float('-inf')
7. 파일 입출력 간단하게 하기
f = open('myfile.txt', 'r')
while True: # EOF 만날때까지 파일읽기 반복
line = f.readline()
if not line:
break
raw = line.split()
print(raw)
f.close()
↓ with - as 구문을 이용
with open('myfile.txt') as file:
for line in file.readlines():
print(line.strip().split('\t'))
1. 파일을 close 하지 않아도 됨 - with - as 블록이 종료되면 파일이 자동으로 close 됨
2. readlines가 EOF까지만 읽으므로, while 문 안에서 EOF를 체크할 필요가 x
'Back-End > Python' 카테고리의 다른 글
[python-웹크롤링] 셀레니움(Selenium) 설치 / 크롬 드라이버(chromedriver) 설치 (0) | 2022.09.21 |
---|---|
[Python-웹 크롤링] BeautifulSoup으로 wikidocs 목차 파싱하기 (1) | 2022.09.08 |
[Python] Python 가상환경 만들기 / venv / virtualenv (0) | 2021.07.09 |
[Python] format함수 (0) | 2021.03.11 |
[Python] 코테 - 반드시 알아야 할 라이브러리 6가지 (6) | 2021.03.11 |
댓글