Python3/Python3 lang 12

[Python3] python3의 itertools.groupby 사용

문제가 풀리지 않아서 솔루션을 찾아보던 중 처음보는 function을 사용하는 솔루션을 보게 되었다. groupby 라는 function 인데 이런걸 본적이 있나 싶었다. 검색을 해보니 pandas 에서 사용하는 groupby 가 가장 먼저 나왔다. 하지만 좀 더 찾아보니 pandas 의 groupby가 아니라 itertools 의 groupby 였다. pasdas groupy는 같은 값을 하나로 묶어 통계 또는 집계를 위해 사용한다고 한다. 만약 도시 별로 가격 평균을 구한다고 가정하면 아래와 같은 코드가 나올 수 있겠다. object.groupby('city').mean() 자세한 내용은 다음 링크에서 찾아볼 수 있다. https://ponyozzang.tistory.com/291 itertools의..

[Python3] is와 == 의 차이

나는 처음에 이 둘이 완벽하게 동일하다고 생각했다. 사건의 발달은 이러하다. 조건문을 써줄 일이 있었는데 != 을 is not 으로 명시해주었다. 이렇게 하면 읽는 사람이 좀 더 쉽게 읽을 수 있을거라고 나름 생각했다. 그런데 문제가 생겼다. 당연히 될거라고 생각했는데 정상 동작하지 않았다. is 가 무엇일까에 대해서 검색해보면 해답을 찾을 수 있다. is 는 ==와 달리 값을 비교하는게 아니라 레퍼런스 즉 포인터를 비교한다. python3 에서 변수는 내부적으로 데이터를 가리키는게 아니라 인스턴스 포인터를 가리킨다고 한다. 그러니 쉽게 말하면 is 연산자는 포인터(레퍼런스)를 비교하는 연산자이지 데이터를 비교하는 연산자가 아니라는 것이다. 그러니 주로 None 과 False, True 를 비교할때 사용..

[Python3] Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str'

최근 새롭게 만들고 있는 프로젝트에서 암호화와 관련된 작업을 하는 와중에 Exception has occurred: TypeError argument should be integer or bytes-like object, not 'str' 라는 예외를 만날 수 있었다. 간단하게 해결할 수 있는 에러이다. 파이썬에서 bytes와 str은 아래와 같은 관계가 성립한다. str -> 디코딩 -> bytes bytes -> 인코딩 -> str 그러므로 encode를 해주던, decode를 해주던 utf-8로 해주면 된다는 소리다. 나 같은 경우는 RSA 키로 만든 public key와 private key가 결과물이 bytes 로 나왔는데 그걸 슬라이싱하려다가 발생한 오류였다. 아래 코드를 보면 알겠지만 exp..

[Pythone] Python3 Memory Error 발생 - 파이썬 메모리 에러 발생

leetcode에서 문제를 풀고 있는데 이런 에러를 만났다. 메모리 에러라고 한다. 사실 이런 에러는 오늘 처음 만났다. MemoryError 라는게 있었는지도 몰랐는데 오늘 발생하고 나서야 이런게 있다는 것을 알게 되었다. 다이나믹프로그래밍을 짜면서 dp 테이블을 굉장히 크게 만들어줘서 발생한 에러인데 실제로는 처음 봤다. 물론 풀이 방법을 달리해야 하는 것은 당연하지만 이 Memory Error 라는 것이 실제로 다른 곳에서 발생했을 경우 대처하는 방법에 대해서 알아보자. 일반적인 대처방법: 1. 그냥 다시 실행해보자. 때에 따라서 매모리 에러의 경우 그냥 다시 실행하면 잘되는 경우가 있다고 한다. 2. 배치 사이즈를 줄인다. (이건 딥러닝을 사용할 경우를 말하는거다.) 순간적으로 많은 데이터를 처리..

[Python3] 코딩테스트 파이썬 사용시 유일한 단점 - 파이썬의 객체 복사 방식(깊은 복사와 얕은 복사)

간만에 알고리즘 문제가 잘 풀린다 했더니 말도 안되는 에러가 발생해서 거의 1시간을 이것저것 만져보면서 고민했던것같다. 도대체 왜 안되는건지? 이 고민을 아무리 해봤는데도 이상할게 전혀 없는 코드인데 원하는 대로 동작하지 않았다. 한참을 코드를 들여다보다가 아차 싶은게 떠올랐다. 객체를 복사하는 과정이 굉장히 많았는데 이 부분에서 에러가 발생했던 것이었다. (한 변수를 사용하면서 그 값에다가 여러 변화를 주면서 사용했다. 이게 문제였다.) 이전에도 인지하고 있었던 내용이었지만 유독 오늘 만난 문제에서 실수를 했던 것이었다. (알고 있는 것과 실천하는 것은 다르다.) 파이썬이 모든 면에서 굉장히 편하고 알고리즘 문제를 풀기에 딱 좋은 언어라는 생각이 들었다. 너무 편하다. 문자열도 깔끔하게 풀어낼 수 있고..

[Python3] 파이썬 @cache @lru_cache 데코레이터

최근 알고리즘 문제를 풀면서 이곳 저곳 블로그들을 돌아다니는 와중에 굉장히 생소한 어노테이션을 사용하는 걸 볼 수 있었다. 최적화에 관련해서 설명해주는 블로그였는데 메모이제이션을 쓰지 않고 @cache 어노테이션을 써서 해보겠다는 취지의 글이었다. 내용은 이러하다. 파이썬에는 @cache 데코레이터가 존재한다. functools 모듈에서 가져올 수 있으며 함수를 대상으로 사용한다. 즉 @cache 데코레이터를 어떤 함수의 선언부 위에 선언하면, 그 함수에 넘어온 인자를 키 key로 그리고 함수의 호출 결과를 값 value로 삼아서 메모이제이션이 자동으로 적용된다. 대략 아래처럼 사용할 수 있다. from functolls import cache @cache def dummyfunc(x): return x..

[Python3] Python 에서 assert 란?

assert는 조건이 참임을 보증할때 사용한다. 어떤 함수가 반드시 정수만을 받는다고 가정한다면 assert 를 통해 정수가 아닌 값이 들어왔을때 assertionError 를 내도록 만들 수 있다. 이와 같인 방식을 방어적 프로그래밍이라고 한다. 확실하게 보장한다는거다. 물론 이 구문 뿐 아니라 실제로 타입이 되었든 value가 되었든간에 무언가를 체크하고 가드하는 동작은 반드시 작성되어있어야만한다. 아래 블로그에서 도움을 받았다. 감사합니다. https://wikidocs.net/21050 03_가정 설정문(assert) assert는 뒤의 조건이 True가 아니면 AssertError를 발생한다. ``` >>> a = 3 >>> assert a == 2 #결과 Traceback (mos ... wi..

[Python3] Python 에서 nonlocal과 정적 스코프

static scope에 대해서 공부하는 중에 global은 들어봤는데 nonlocal이라는게 들어본적이 없어서 찾아보았다. (프언 수업은 정말 역대급으로 생소한것같다. 이전에 이런 내용들을 접해본적이 없어서 꽤나 고생중이다.) 아래 간단한 예제를 보면 바로 이해가 될 것이다. 눈으로 따라가기에는 조금 번거로울 수 있는데 연습장에 조금씩 써보면서 딱 한번만 따라가보면 정확히 이해할 수 있다. nonlocal: 지역 변수가 아님을 선언 nonlocal이 사용된 함수 바로 한단계 바깥쪽에 위치한 변수와 바인딩을 할 수 있다. x = 50 def f(): a = 777 def g(): a = 100 def h(): global x x = 999 nonlocal a a = 333 h() print("[Level..

[Python3] Python에서의 False와 None은 같은 것인가?

특정 코드를 보던 중에 파라미터로 넘어온 값을 not 으로 if문에서 판별해주는 구문이 있었다. 해당 전달값이 False라면 if문을 실행하고, True라면 if문을 실행하지 말라는 뜻으로 해석했는데, 그런데 None이 들어오면 어떻게 되는거지? 라는 생각이 들었다. 물론 똑같이 None이 온다면 False일때와 같이 동작하는 것이 당연하다고 생각이 들었지만, 그렇다면 조건에서 False True 를 체크할때만 None은 False로 동작할 수 있는건가? 아니면 실제로 같이 취급되는 것인지에 대해 궁금해졌다. 따라서 간단한 코드 몇줄로 확인해볼 수 있었다. print(None == False) 우선 해당 코드는 False가 나온다. 즉 None은 False가 아니다. 아예 다른 존재다. 그렇다면 어떤 타..

[Python3] 파이썬 패키지 설치 완료 후에 import 에러 발생할 경우 + could not be resolved Pylance

파이썬에서 원하는 패키지를 pip install을 통해 정상적으로 설치하였고, 성공적으로 설치하였다는 메시지도 확인했는데도 import 가 되지 않는 경우가 있다. 혹시 잘못됬나 싶어서 패키지를 지워도 보고, 다시 import문을 적어봐도 이런 경우에는 소용이 없다. 보통 pip를 해도 안되는 경우는 크게 pip버전이 안맞아서 pip를 upgrade해줘야 하는 경우, 아예 패키지명이 잘못된 경우 등이 있는데, 이 경우는 성공적으로 설치했음에도 import가 되지 않는 경우를 소개한다. 위 사진처럼 이미 잘 설치되어있음에도 from import 구문이 작동하지 않는 것이다. 바로 아래 처럼 말이다. heapdict라이브러리를 사용하기 위해 from절에 적어주었는데 노란 밑줄이 있는 것을 볼 수 있다. 살펴..

반응형