ABOUT ME

-

  • #2 파이썬 여러가지 팁
    컴퓨터/파이썬 2020. 5. 30. 17:05
    728x90
    반응형

    algoexpert 공부 일지 #2

    https://www.algoexpert.io/questions

     

    1. 변수 T/F 이용

    python
    isPeak = arr[i-1] < arr[i] and arr[i] > arr[i+1]

     

    2. range -> array

    python
    a = range(0, 4) a[1] = 1 # 파이썬2에선 list object # 파이썬3에선 range object return해서 # lazy evaluation

     

    3. 부등호

    python
    if 3 < a < 4: a = 3.5

     

    4. enumerate

    python
    a = "ABCD" for i,j in enumerate(a): print(i,j) # (0,A), (1,B), (2,C), (3,D)

     

    5. 두 변수 바꾸기

    python
    a = 3, b = 4 a, b = b, a

     

    6. 두 array 여집합(?) A-B 

    python
    a = [1, 2, 3, 4] b = [1, 2, 6, 7, 9] c = [x for x in b if not in a]

     

    7. range 거꾸로 (step 말고)

    python
    for i in reversed(range(0, 3)): print(i) # 2, 1, 0

     

    8. For-Else

    python
    for i in range(3): if i == 4: break else: print('dump') # output : dump

     

    9. 삼항 연산자 (ternary operator)

    python
    return True if x != 1 else False

     

    10. reversed list 출력하기

    python
    # reversed(array) returns nothing print(list(reversed(range(4))) # [3, 2, 1, 0]

     

    11. 두 배열 중 같은 요소들 뽑기

    python
    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

    python
    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() 함수 걸린 시간 알아보기

    python
    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 뽑아내기

    python
    lists = ['xyzzyx', 'zz', 'yzzy'] print(max(lists, key=len))

     

    15. 팩토리얼 memoization

    python
    # 팩토리얼 계산은 일반적으로 똑같다. # 팩토리얼 계산부터 빠르게 하려면, 구현을 다르게 # 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

    python
    from dataclasses import dataclass from typing import Type, Optional @dataclass class Node: value: int next: Optional[Type] = None node = Node(3)

     

    17. __slots__

    __dict__를 사용 못하지만, 메모리 접근 속도가 더 빠르며, 값을 변경 못함

    python
    class A: __slots__ = ("a", "b", "c") def __init__(self): self.a = 0 self.b = 1 self.c = 2
    728x90

    댓글