본문 바로가기

파이썬

[Python] Leet Code 937 : Reorder Log Files 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 937 : Reorder Log Files def reorderLogFiles(self, logs: List[str]) -> List[str]: letters, digits = [], [] for log in logs: if log.split()[1].isdigit(): digits.append(log) else: letters.append(log) letters.sort(key=lambda x: (x.split()[1:], x.split()[0])) return letters + digits 포인트 로그의 두번째 원소를 기준으로 .isdigit()을 사용하여 두 개의 리스트로 분류(letters, digits) lambda를 이용한 sort 문자가 동일한 .. 더보기
[Python] Leet Code 344 : Reverse String 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 344 : Reverse String def reverseString(self, s: List[str]) -> None: left, right = 0, len(s) - 1 while left None: s.reverse() 포인트 .reverse() 기법 사용 def reverseString(self, s: List[str]) -> None: s[:] = s[::-1] 포인트 본래 s = s[::-.. 더보기
[Python] Leet Code 125 : Valid Palindrome 풀이 및 분석 본 내용은 를 참고했습니다. Leet Code 125 : Valid Palindrome def isPalindrome(self, s: str) -> bool: strs = [] for char in s: if char.isalnum(): strs.append(char.lower()) while len(strs) > 1: if strs.pop(0) != strs.pop(): return False return True 포인트 .isalnum() : alphabet, number인지 판단 .pop(0) : 맨 앞 원소 pop, 그러나 O(n)으로 속도가 느림 def isPalindrome(self, s: str) -> bool: strs : Deque = collections.deque() for char .. 더보기
[Python] 딕셔너리(dictionary) | Ordereddict(), defaultdict(), Counter() 출처: 파이썬 알고리즘 인터뷰, 박상길 파이썬의 딕셔너리는 키/값 구조로 이루어진 딕셔너리를 말한다 내부적으로는 해시 테이블로 구현되어 있다. 딕셔너리의 주요 연산 시간 복잡도 len(a) : O(1) a[key] : O(1) a[key] = value : O(1) key in a : O(1) 파이썬 3.6 이하에서는 입력 순서가 유지되지 않다 collections.OrderedDict()를 제공했다. 파이썬 3.7부터는 내부적으로 인덱스를 이용해 입력 순서를 유지하도록 개선돼었다. collections.defaultdict() 조회 시 항상 디폴트 값을 생성해 키 오류를 방지한다. from collections import defaultdict def def_value(): return "Not Pre.. 더보기
[Python] 파이썬 문법 - is 와 ==의 차이 | python is & == 출처: 파이썬 알고리즘 인터뷰, 박상길 파이썬의 비교연산자 중 is와 ==가 있다. 이 둘은 파이썬의 객체 구조와 관련이 깊다. is id() 값을 비교하는 함수이다. None은 null로서 값 자체가 정의되어 있지 않으므로 ==로 비교불가하다. if a is None: pass == 값을 비교하는 연산자이다. 예시 a = [1, 2, 3] a == a # True a == list(a) # True a is a # True a is list(a) # False 값은 동일하지만 list()로 한 번 더 묶어주면, 별도의 객체로 복사되고 다른 id를 갖게 된다. 따라서 is는 False가 된다. a = [1, 2, 3] a == copy.deepcopy(a) # True a is copy.deepcopy(.. 더보기
[selenium] “Element Is Not Clickable at Point” 해결법 | 팝업창 전환 python에서 selenium으로 웹 크롤링을 할 때, “Element Is Not Clickable at Point”에러가 날 때가 있다 위의 예시 그림과 같이, 웹 페이지의 정보가 팜업형태로 나타날 때, 팝업 창 위의 element를 크롤링 할 때 나타나는 에러이다. 팝업창에 마우스를 가져다 대서, inspect element를 해봤다. 자세히 보면 팝업 창의 형태는 iframe 내에 새로운 html이 들어가 있는 모양임을 알 수 있다. # switch to iframe driver.switch_to.frame('jqxIframe1') time.sleep(3) selenium의 switch_to.frame을 이용해, 해당 frame의 id로 창을 전환한 뒤, 잠시 멈췄다가 창 내의 e.. 더보기
[윤성우의 열혈 파이썬 중급편] 12. named tuple 출처 : 윤성우의 열혈 파이썬 : 중급 12. named tuple named tuple의 이해와 작성 tri_one = (12, 15) print(tri_one) # (12, 15) from collections import namedtuple Tri = namedtuple('Triangle', ['bottom', 'height']) t = Tri(3, 7) # named tuple 객체 생성 print(t[0], t[1]) # 일반 tuple과 동일한 방법으로 접근 가능 print(t, bottom, t.height) # 이름으로도 접근 가능 t[0] = 15 # error 튜플 성격을 갖는 클래스 기본 골격은 튜플이나 일반 튜플과 달리 위치별로 이름을 갖는.. 더보기
[윤성우의 열혈 파이썬 중급편] 11. 튜플의 패킹과 언패킹 출처 : 윤성우의 열혈 파이썬 : 중급 11. 튜플의 패킹과 언패킹 튜플 패킹 : 하나 이상의 값을 튜플로 묶는 행위 튜플 언패킹 : 튜플에 묶여 있는 값들을 풀어내는 행위 tri_one = (12, 15) print(tri_one) tri_three = (12, 25) bt, ht = tri_three print(bt, ht) nums = (1, 2, 3, 4, 5) n1, n2, *others = nums # 둘 이상의 값을 리스트로 묶을 때 *를 사용 print(n1) # 1 print(n2) # 2 print(othres) # [3, 4, 5] first, *others, last = nums *others, n1, n2 = nums # 리스트를 대상으로도 동일하게 동작한다 nums = [1, 2.. 더보기
[윤성우의 열혈 파이썬 중급편] 10. generator 표현식 출처 : 윤성우의 열혈 파이썬 : 중급 10. generator 표현식 하나의 문장으로 generator를 구성하는 방법 generator 함수 & generator 표현식 generator 표현식은 generator 함수와 마찬가지로 generator 객체를 생성하는 방법이다 generator 표현식의 문법 구성이 list 컴프리헨션과 거의 같다 def show_all(s): for i in s: print(i, end = ' ') st = [2 * i for i in range(1, 10)] show_all(st) def times2(): for i in range(1, 10): yield 2 * i g = times2() show_all(g) g = (2 * i for i in ran.. 더보기
[윤성우의 열혈 파이썬 중급편] 09. generator 함수 출처 : 윤성우의 열혈 파이썬 : 중급 09. generator 함수 generator은 iterator 객체의 한 종류 generator를 만드는 두가지 방법 generator 함수(function) generator 표현식(expression) 함수 기반의 제너레이터 def gen_num(): print('first number') yield 1 print('second number') yield 2 print('third number') yield 3 gen = gen_num() # generator 객체 생성 type(gen) # next(gen) # first number \n 1 gen_num이 일반 함수라면 그 안에 있는 모든 내용이 실행되나, 이 .. 더보기