728x90

파이썬 19

[Python] deque

파이썬의 deque가 무엇인지 언제 사용해야 하는지 같이 알아보자. 🤔 보통 queue는 FIFO(First In First Out) 방식으로 작동한다. FIFO방식으로 작동하지 않는 양방향 queue가 존재하는데 그것이 바로 deque이다. 즉, 맨앞이나 맨뒤 양쪽 방향에서 원소를 추가하거나 제거할 수 있다. deque는 양 끝 원소의 append와 pop이 빠르다. 일반적인 List가 append와 pop연산에 O(n)이 소요되지만, deque O(1)으로 접근 가능하다. deque에 존재하는 method는 아래와 같다. - append(item) : 원소를 deque 오른쪽 끝에 삽입 - appendLeft(item) : 원소를 deque 왼쪽 끝에 삽입 - pop() : deque의 오른쪽 끝 원..

🐍Python | Django 2022.06.04

[Python] heapq

데이터를 정렬된 상태로 저장하기 위해 사용하는 파이썬의 내장 모듈인 heapq에 대해 알아보자. heapq 모듈은 binary tree 기반의 min heap 자료구조를 제공한다. min heap을 사용하면 원소들이 항상 정렬된 상태로 추가되고 삭제되며, min heap에서 가장 작은 원소의 값은 언제나 binary tree의 루트(인덱스 0)에 위치한다. 내부적으로 min heap 내의 모든 원소(k)는 항상 자식 원소들(2k+1, 2k+2) 보다 크기가 작거나 같도록 원소가 추가, 삭제된다. 아래의 그림으로 위의 조건을 만족시키는 간단한 min heap 구조를 보자. 우선 heapq를 사용하기 위해서는 다음과 같이 import 후 관련 함수를 사용할 수 있다. import heapq 파이썬에서는 보통..

🐍Python | Django 2022.06.03

[Python] zip()

python에서 두 그룹의 데이터를 서로 엮어주는 내장 함수 zip()에 대해 알아보자. 기본적인 zip()의 사용법은 여러 개의 iterable한 객체를 인자로 받고, 각 객체가 담고 있는 원소를 짝지어 tuple형태로 반환한다. 아래의 예제를 보자. n_list = [1, 2, 3] s_list = ['A', 'B', 'C'] for z in zip(n_list, s_list): print(z) ''' (1, 'A') (2, 'B') (3, 'C') ''' 위와 같이 여러 그룹의 데이터를 하나씩 차례로 짝을 지어준다. 어떤 상황에서 zip을 유용하게 사용할 수 있나요? 🙋‍♂️ zip은 여러 그룹의 데이터를 한 번의 루프로 처리할 수 있다. 예를 들어 3개의 문자열 내의 글자를 하나씩 루프를 돌릴 필..

🐍Python | Django 2022.05.30

[Python] enumerate()

기본적으로 파이썬에서의 for 루프는 ' for 원소 in 목록: ' 형태로 작성된다. 목록 부분에는 리스트, 튜플, 문자열 등 iterable 한 데이터 타입을 사용할 수 있다. name = 'Mike' for s in name: print(s) # M # i # k # e 만약, 위와같은 코드에서 각 문자의 인덱스도 함께 출력하고 싶다면 어떤 방법을 사용할 수 있을까? 🤔 먼저 인덱스 변수를 따로 생성하여 인덱스와 함께 출력할 수 있다. strings = ['a', 'b', 'c'] i = 0 for s in strings: print(i, s) i += 1 # 0 a # 1 b # 2 c 위의 방법은 반복문이 끝난 뒤에도 i라는 변수가 그대로 남아있어 이상적인 방법은 아니다. 그렇다면 다음의 방법은..

🐍Python | Django 2022.05.25

[Python] Exception 추적

예외처리 예외가 발생했을 때, 아래와 같이 처리할 수 있다. try: ... except: ... else: ... finally: ... 위와 같이 try, except, else, finally 블록을 정의할 수 있고, try블록에서 예외가 발생하면 except블록에서 처리할 수 있다. else블록의 경우 try블록 하위에서 에러가 발생하지 않았을 때 실행되고, finally블록은 예외 발생 여부와 상관없이 실행된다. Stack trace 출력 예외가 발생하더라도 프로그램이 종료되는 것을 막기위해 아래와 같이 로그를 출력하고, 무시하도록 처리하였다고 해보자. try: A = 1 value = A[0] except: print("Index Error") 예외가 발생하더라도 프로그램이 종료되지는 않지만,..

🐍Python | Django 2022.05.23

[Python] Duck Typing?

파이썬은 덕타이핑을 지원하는 언어라는 말을 많이 들어봤는데 덕타이핑이 뭐지?? Duck Typing - If it walks like a duck and it quacks like a duck, then it must be a duck 해석해보면 "오리처럼 걷고, 오리처럼 꽥꽥거리면 그것은 틀림없이 오리다."라는 뜻이다. 🦆 파이썬에서 덕타이핑을 지원한다는 뜻은 동적 타입의 언어에서 본질적으로 다른 클래스라도 객체의 적합성은 실제 유형이 아니라 특정 메서드와 속성의 존재에 의해 결정된다는 말이다. 🤔 이렇게 들어서는 잘 이해가 되지 않으니 아래의 예시를 보자. class Duck(): def sound(self): print('꽥꽥') class Dog(): def sound(self): print('멍..

🐍Python | Django 2022.05.22

[Python] Comprehension?

파이썬에서 사용할 수 있는 컴프리헨션은 List, Set, Dict 컴프리헨션이 있고, 이번 포스팅에서는 대표적으로 List로 컴프리헨션에 대해 알아보자. List 컴프리헨션이란 반복되거나 특정 조건을 만족하는 리스트를 보다 쉽게 만들어 내기 위한 방법으로 아래와 같이 사용할 수 있다. >>> [i for i in range(10)] [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> [i * 2 for i in range(5)] [0, 2, 4, 6, 8] 위와 같이 반복문을 사용하는 것 외에도 조건문을 추가로 사용하여 리스트를 만들 수 있다. >>> [i for i in range(20) if i % 2 == 0] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] >>> [i..

🐍Python | Django 2022.05.20

[Python] Type Check - type(), isinstance()

type() type()의 경우 파이썬에서 기본적으로 제공하는 자료형에 대해 type check가 가능하다. type(1) is int # True type([]) is list # True type('abc') is str # True type(1) is type(2) # True 하지만, type()은 상속의 경우가 고려되지 않아 상속받은 클래스의 인스턴스는 구분할 수 없다. class A(): pass class B(A): pass a = A() b = B() type(a) is A # True type(b) is B # True type(b) is A # False 이러한 문제를 해결하기 위해서는 어떤 메서드를 사용해야 할까? isInstance() type()의 한계점을 isInstance()로..

🐍Python | Django 2022.05.18

[Python] lstrip(), rstrip(), strip()

개발을 하다 보면 문자열 끝의 공백을 제거한다거나, 특정 문자를 제거해야 하는 경우가 은근히 자주 발생하여 한번 정리해두면 두고두고 보겠구나라는 생각이 들어, 한번 정리해두려고 한다. 파이썬에서는 strip()이라는 함수를 제공하며, strip()을 이용하면 특정 문자를 제거할 수 있다. 기본적인 사용 방식은 아래와 같다. - strip([chars]) : 인자로 전달된 문자를 양쪽에서 제거 - lstrip([chars]) : 인자로 전달된 문자를 왼쪽에서 제거 - rstrip([chars]) : 인자로 전달된 문자를 오른쪽에서 제거 인자를 전달하지 않을 수도 있으며, 전달하지 않는 경우 기본적으로 공백을 제거한다. 아래의 예시를 보자. string = ' Hello World! ' print('stri..

🐍Python | Django 2022.05.17

[Python] __new__ ? __init__ ?

파이썬 프로그래머라면 생성자에 관해 들어본 적이 있을 것이고, __init__ 메서드는 생성자 메서드라는 것도 알고 있을 것이다. 하지만, 한 가지 짚고 넘어갈 점은 __init__메서드는 클래스 오브젝트에 메모리를 할당하지 않는다는 것이다. 😮 이 말은 __init__ 메서드는 인스턴스를 생성하지 않는다는 말인데... 그러면 __init__을 생성자라고 할 수 있을까..? 😳 즉, __init__ 메서드는 객체가 생성되어 초기화되는 즉시 호출되기는 하지만, 메모리는 할당하지 않는 메서드이다. 그렇다면, 실제로 메모리를 할당하는 메서드는 무엇일까? 바로 __new__ 메서드이다. 파이썬에서 객체를 생성해보면, __init__이 실행되기 전 항상 __new__가 먼저 실행되며 이때 객체에 메모리가 할당된다..

🐍Python | Django 2022.05.16

[Python] generator

generator를 간단히 설명하면, iterator를 생성해주는 function이다. ※ iterator? https://dev-jy.tistory.com/20 [Python] iterable? iterator? iterable? iterator? iterable의 의미는 요소를 하나씩 차례로 반환 가능한 object를 뜻한다. iterable의 예로는 sequence type인 list, str, tuple 등이 있고, non-sequence type인 dict나 file도 iterable 하다.. dev-jy.tistory.com 아래의 예시를 보자. def generator(n): i = 0 while i < n: yield i i += 1 얼핏 보면 일반 함수와 비슷해 보이지만, yield라는 ..

🐍Python | Django 2022.05.09
728x90