Python 4

[Python] RecursionError: maximum recursion depth exceeded 에 대하여

간혹 재귀 함수를 설계하거나, 재귀적 호출을 통해 함수 실행을 할때 이러한 오류 문구를 볼 수 있다. 말 그대로 최대 재귀 깊이를 초과했다는 뜻이다. 파이썬의 인터프리터는 기본적으로 스택 오버플로우 방지를 위해 재귀 함수 호출의 깊이를 1000 으로 제한한다. 그렇기 때문에 최대 재귀 제한을 넘어서는 재귀 호출을 한다면 이런 오류를 뱉어낸다. 또한 어떤 재귀 함수가 무한한 루프에 돌게 되거나 재귀에 빠져나오지 못했을 때도 이러한 오류을 뱉어낸다. 다음과 같은 예시 코드를 보자 def infinite_recur(n): if n == 0: return 1 else: return 1 + infinite_recur(n - 1)print(infinite_recur(1000)) ..

Python 2024.09.08

[Python] SyntaxWarning: "is" with a literal. Did you mean "=="? 에 대해서

가끔 파이썬으로 코드를 작성하다보면 이런 경고문구를 볼 수가 있다. 그리고 알고리즘 공부나 문제를 파이썬으로 입문한 사람들은 이런 경고를 자주 보았을 것 같기도 하다. 해당 경고를 해석하자면 이렇다 "is" 를 지금 a 같은 문자열이나 숫자같은 리터럴 값과 사용하고 있는데당신은 "==" 를 의도하고 사용한것이 아닌가요?왜 이런 경고 문구를 띄워주냐면 "is" 와 "==" 는 차이가 있기 때문이다. is 는 두 객체가 동일한 객체인지를 확인한다. 즉 메모리 상에서 같은 주소를 참조하는지 비교한다.== 은 두 값이 같은 값인지만을 비교한다. a = 'Tamako'if a is 'Tamako': print('same') # 경고 발생if a == 'Tamako': print('same') # 올..

Python 2024.09.05

[Python] collections.Counter 에 대해 알아보자

예전에 특정 논문속에 있는 특정 박테리아들을 분류하고 찾는 작업을 한적이 있었다. 나는 그것을 간단한 파이썬을 통해 처리하고 있었는데 find() 로 해당 박테리아명이 현재 논문에 있는지 확인하고, 있다면 해당 박테리아명이 몇번이나 언급되었는지 등을 리스트 메서드 count() 로 수집하였다. 그런 와중에 이런 생각을 가지게 되었다. count() 를 계속해서 호출해야하는게 너무 별로인거 같다 그런 와중에 collections 모듈의 Counter 를 알게 되었는데, 매우 편리한 기능이였다. import collectionscollections.Counter([iterable-or-mapping])¶ Counter 는 해당하는 반복가능한 자료구조 혹은 딕셔너리같은 매핑 가능한 객체에서 요소들의 개수를 세..

Python 2024.08.30

[Python] enumerate()와 zip()

파이썬을 활용해서 코딩 테스트 문제를 풀다 보면 종종 이런 생각을 하곤 했다.  "리스트를 순차 접근하는 와중에도 인덱싱을 할 수 있으면 편할 거 같은데?" 파이썬이 가지고 있는 함수에 대해 잘 몰랐던 나는 최근에야 enumerate() 라는 함수의 존재를 알게 되었다. 지금도 그렇겠지만 나는 파이썬이 가지고 있는 기능을 제대로 활용하지 못한 채 문제들을 풀고 있었던 것이다. enumerate() 이란?enumerate() 는 이터러블한 객체를 순회할 때 인덱스와 값을 동시에 가져올 수 있게 해주는 기능을 한다. 즉 내가 따로 인덱싱을 하지 않아도 된다는 점에서 간편하고 실수를 줄일 수 있다. enumerate() 는 이런 형태로 사용할 수가 있다.enumerate(iterable, start=0) it..

Python 2024.08.26