2024. 10. 3. 12:51ㆍTroubleshooting
01 시간 복잡도를 비교 점검하라.
문제URL: 대충 만든 자판
문제 발견: target 단어에서 'AABB'와 같이 중복된 단어가 나오면 해당 과정을 반복하는 문제가 있음.
해결 방법: targets리스트를 한번에 dict형식으로 정리해두면 중복단어에 대해 빨리 처리할 수 있음.
단, 입력 문자열의 길이와 호출 빈도에 따라 두 방법의 효율성이 달라질 수 있음. 짧은 문자열을 자주 사용하는 경우 첫 번째 방법이 유리할 수 있지만, 여러 번의 입력 문자열에 대해 반복적으로 조회해야 할 경우 두 번째 방법이 더 효율적일 것이라 생각되니 상황에 따라 판단한다.
▶ 코드를 완성했을 때 어떻게하면 불필요한 반복 = 중복 체크를 줄일 수 있을지 고민해보자.
02 인사이트
1. 제너레이터 표현식을 정확히 알고 사용해야 해당 에러 문구를 피할 수 있다.
max() arg is an empty sequence.
<제너레이터의 정의와 특징>
a. 정의
- 이터레이터를 생성하는 특별한 함수이다. yield 키워드를 사용하여 값을 하나씩 반환한다.
b. 특징
- 지연 평가: 제너레이터는 값을 요청할 때마다 하나씩 생성하므로 메모리를 효율적으로 사용한다.
- 상태 유지: 제너레이터는 이전 상태를 기억하고 다음 호출 시 그 상태에서 계속 실행된다.
- 무한 시퀀스: 제너레이터를 사용하면 무한한 수열을 생성할 수 있다.
def count_up_to(n):
count = 1
while count <= n:
yield count
count += 1
gen = count_up_to(5)
for number in gen:
print(number) # 출력: 1, 2, 3, 4, 5
<제너레이터 표현식과 리스트 컴프리헨션>
a. 제너레이터 표현식은 한 번에 모든 값을 메모리에 저장하지 않고, 각 값이 필요할 때마다 계산하여 반환한다.
b. 리스트 컴프리헨션의 한 번에 모든 값을 메모리에 저장하므로, 메모리를 더 많이 사용한다.
c. 이러한 차이로 인해 제너레이터는 큰 데이터셋을 처리할 때 유용하며, 리스트 컴프리헨션은 작은 데이터셋을 간편하게 처리할 때 유용하다.
squared_gen = (x * x for x in range(5))
for value in squared_gen:
print(value) # 출력: 0, 1, 4, 9, 16
2. 내장 함수의 이름이 다른 변수로 덮어 씌워졌을 때 볼 수 있는 에러 문구이다.
'str' object is not callable.
3. Python에서는 리스트에서 특정 값을 모두 제거하는 데 remove()와 filter() 등의 방법이 있다.
3. Python에서 len은 SQL에서 LENGTH함수와 같다.
SELECT tweet_id
FROM Tweets
WHERE LENGTH(content) > 15;
'Troubleshooting' 카테고리의 다른 글
PYTHON: 알파벳 리스트, is의 개체식별 기능, 딕셔너리 활용 문제 (0) | 2024.10.13 |
---|---|
PYTHON: count(), if not~, strip(), import Counter, extend, set (0) | 2024.09.25 |
PYTHON: 리스트 컴프리헨션의 조건, map과 filter의 활용 예시 (1) | 2024.09.12 |
PYTHON: 중복 제거, 문자 위치 찾기, 파생 변수 생성, map(str,변수) (0) | 2024.09.12 |
PYTHON: 소수 만들기 (라이브러리 활용, 비활용편) (0) | 2024.09.05 |