-
#2 파이썬 여러가지 팁컴퓨터/파이썬 2020. 5. 30. 17:05728x90반응형
algoexpert 공부 일지 #2
https://www.algoexpert.io/questions
1. 변수 T/F 이용
isPeak = arr[i-1] < arr[i] and arr[i] > arr[i+1]
2. range -> array
a = range(0, 4) a[1] = 1 # 파이썬2에선 list object # 파이썬3에선 range object를 return해서 # lazy evaluation
3. 부등호
if 3 < a < 4: a = 3.5
4. enumerate
a = "ABCD" for i,j in enumerate(a): print(i,j) # (0,A), (1,B), (2,C), (3,D)
5. 두 변수 바꾸기
a = 3, b = 4 a, b = b, a
6. 두 array 여집합(?) A-B
a = [1, 2, 3, 4] b = [1, 2, 6, 7, 9] c = [x for x in b if not in a]
7. range 거꾸로 (step 말고)
for i in reversed(range(0, 3)): print(i) # 2, 1, 0
8. For-Else
for i in range(3): if i == 4: break else: print('dump') # output : dump
9. 삼항 연산자 (ternary operator)
return True if x != 1 else False
10. reversed list 출력하기
# reversed(array) returns nothing print(list(reversed(range(4))) # [3, 2, 1, 0]
11. 두 배열 중 같은 요소들 뽑기
def common_element(list1, list2): return [common for common in list1 if common in list2]
12. randint 알고리즘은 메르센 트위스터 기반,
random.shuffle 함수는 Fisher-Yates | O(n)
랜덤 모듈 구현하기 : choiseokwon.tistory.com/244
import random def shuffle(arr): for i in reversed(range(1, len(arr))): # len(arr) - 1 ~ 1까지 j = random.randit(0, i) # 메르센 트위스터 arr[i], arr[j] = arr[j], arr[i]
13. timeit() 함수 걸린 시간 알아보기
def timeit(func): @wraps(func) def _time_it(*args, **kwargs): start = int(round(time() * 1000)) try: return func(*args, **kwargs) finally: end_ = int(round(time() * 1000)) - start print(f"총 걸린 시간: {end_ if end_ > 0 else 0} ms") return _time_it # decorator 이므로, 함수 위에 @timeit @timeit def factorial(n, memo={0: 1, 1: 1, 2: 2}): if n in memo: return memo[n] else: x = factorial(n - 1) * n memo[n] = x return x
14. string으로 이루어진 list에서 가장 긴 string 뽑아내기
lists = ['xyzzyx', 'zz', 'yzzy'] print(max(lists, key=len))
15. 팩토리얼 memoization
# 첫 팩토리얼 계산은 일반적으로 똑같다. # 첫 팩토리얼 계산부터 빠르게 하려면, 구현을 다르게 # 2번째 팩토리얼 함수를 부를 때 효과를 본다. # math.factorial(n) 은 C로 작성돼서 더 빠르다. """ 기본 매개변수에 mutable object (list, dict..)를 사용하면 함수를 부를 때 이 메모리는 계속 유지된다. 예) factorial(3) # memo = {0: 1, 1: 1, 2: 2, 3: 3} factorial(4) # 위 memo값 그대로에서, memo = {0: 1, 1: 1, 2: 2, 3:3, 4:5} """ def factorial(n, memo={0: 1, 1: 1, 2: 2}): if n in memo: return memo[n] else: x = factorial(n - 1) * n memo[n] = x return x
16. dataclass
from dataclasses import dataclass from typing import Type, Optional @dataclass class Node: value: int next: Optional[Type] = None node = Node(3)
17. __slots__
__dict__를 사용 못하지만, 메모리 접근 속도가 더 빠르며, 값을 변경 못함
class A: __slots__ = ("a", "b", "c") def __init__(self): self.a = 0 self.b = 1 self.c = 2
728x90'컴퓨터 > 파이썬' 카테고리의 다른 글
Sublime Text 3 파이썬 개발 환경 만들기 (0) 2020.06.14 #1 파이썬 정규 표현식 공부 (regular expression) (0) 2020.05.11 코로나 바이러스 현황을 파이썬 웹 request해서 GUI로 만들기 (0) 2020.05.08