반응형

파이썬 111

파이썬 deque 사용하는 이유 / popleft

파이썬 deque는 list와 dictionary와 거의 동일하게 생각하면 된다. 차이는 popleft의 시간 차이다. list의 경우 pop()으로 마지막 값을 꺼내는 경우 O(1) (일정한 시간) 시간이 걸리는데, pop(0)으로 가장 앞단에 값을 꺼낼때는 list 크기에 따라 읽어 오는 시간이 달라진다. O(n) 시간이 걸린다. 하지만 deque를 사용할 경우 popleft()를 사용하면 리스트의 pop(0)과 같은 기능을 주면서 걸리는 시간은 O(1)이 걸린다. pop을 사용하는 경우 말고 index로 값을 읽어 오는 경우는 리스트나 deque 모두 O(1)로 일정한 시간만 걸린다. 즉, index의 주소 값으로 바로 값을 찾는 것이다. 아래 코드는 각 상황에 따라 시간을 측정한 값이다. 0.00..

linked list / 연결리스트 란? 파이썬

링크드 리스트는 파이썬 동적 구조를 잘 설명해 주는 개념이다. 일반적인 정적인 언어들은 변수 선언을 통해 메모를 순차적으로 채워 간다. linked list 는 본인의 값과 다음 노드를 알려주는 포인터를 지녀서 메모리에서 연속적으로 사용되지 않고 포인터로 연결된 형태로 사용이 가능하다. 아래 예제를 통해 이해해 보자. 코드>> class linked_node: def __init__(self, x): self.val = x self.next = None class node_value_extract: def extract(self, linked_n): a_var = [] node = linked_n # 리스트 변환 while node is not None: a_var.append(node.val) node..

파이썬 typing모듈 왜 사용하나? , mypy 검사

코드 >> import typing a_var: str = "hello" a_var = 5 print(a_var) def typing_check(b_var: str): print(b_var) typing_check(6) c_var: typing.List[int] = [1, 2, 3] c_var.append("hi") print(c_var) 결과 >> 5 6 [1, 2, 3, 'hi'] 주석>> 파이썬은 동적 할당을 한다. 예를 들어 리스트가 있으면 append로 추가적으로 리스트 값을 늘릴 수도 있고 변수에 int 를 넣었다가 string으로 변경도 가능하다. 컴파일 언어들은 컴파일 과정에서 문제를 발견할 수 있다. 하지만 파이썬의 경우 코드를 짜는 사람의 휴먼 에러로 잘못된 값을 할당하고도 모르고 지나..

파이썬 sys.getsizeof 변수 크기/사이즈 확인

파이썬에서 변수의 사이즈를 확인하는 방법은 sys 모듈에서 getsizeof를 사용하면 된다. 아래 예제를 참조 하자 예제>> import sys a_var = sys.maxsize b_var = 1 c_var = float('inf') print(a_var) print(b_var) print(c_var) print("#####################") print(sys.getsizeof(a_var)) print(type(a_var)) print(sys.getsizeof(b_var)) print(type(b_var)) print(sys.getsizeof(c_var)) print(type(c_var)) print("#####################") a_var = 3.1212312312312..

인스타그램 자동검색(해시태그)

지난번 자동 로그인 다음으로 자동 검색을 실행하겠다. 코드>> from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.keys import Keys import time class InstagramAutomation(): def log_in(self): options = webdriver.ChromeOptions() # options.headless = Tru..

if in 구문, for in 구문

if A in B 구문은 B에 값들 중에 A가 있는지 확인하는 것이다. for A in B 구문은 B 값들을 하나씩 A 변수에 넣어주는 것이다. 아래 코드로 확인해 보자 코드>> list_var = [2,11,15,7,5,14,8,9] def compare0(list_var, goal): for i, val in enumerate(list_var): print(i,":",val) if goal == val: return i, list_var.index(val) def compare1(list_var, goal): if goal in list_var: print("값이 존재합니다.") a_var, b_var = compare0(list_var, 14) print(a_var) print(b_var) prin..

ASCII vs Unicode(유니코드) vs UTF-8 차이

처음에 코드에서 문자를 표현하던 방식은 ASCII 인코딩 방식이 었다. ASCII 는 8비트(1바이트) 공간만 차지 한다. 한 비트는 checksum으로 사용하고 2^7 = 128 개는 글자를 표현하는데 사용 되었다. 하지만 영어를 표현할 수 있지만 한글같은 문자는 1바이트로 표현이 안되어서 나온 방식이 유니코드 인코딩이다. 2~4바이트의 여유 공간을 가지고 문자를 표현 해준다. 유니코드의 문제는 영어는 한바이트로 표현이 가능함에도 2바이트 이상의 공간을 차지하므로 메모리를 불필요하게 사용하게 된것이다. 그래서 나온 방식이 UTF-8로 문자 종류에 따라 가변적으로 메모리를 할당해서 효율적으로 사용할 수 있게 해준다.

sorted 와 key 값, lambda 사용법, 키 값으로 함수사용

코드>> a_var = ["4444", "333", "222", "455", "505", "770"] def key_ex(x): return x[-1],x[1] print(sorted(a_var, key=len)) print("#################") print(sorted(a_var, key=key_ex)) print("#################") print(sorted(a_var, key=lambda x: x[0])) 결과>> ['333', '222', '455', '505', '770', '4444'] ################# ['770', '222', '333', '4444', '505', '455'] ################# ['222', '333', '4444'..

인스타그램 자동 로그인 (Instagram Log in)

코드>> from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import time def log_in(): options = webdriver.ChromeOptions() # options.headless = True options.add_experimental_option("excludeSwitches", ["enable-logging"]) # options.add_argument("user-agent=Moz..

반응형