본문 바로가기
반응형

python15

Python zip에서 데이터가 사라질 때: strict=True와 zip_longest 선택 이름 세 개와 점수 두 개를 zip으로 묶었는데 결과가 두 개만 남았다면, 기본 동작을 확인하세요. 길이가 같아야 하는 입력은 zip(..., strict=True)로 검사하고, 짝이 없는 항목도 보존해야 한다면 zip_longest로 누락을 표시합니다.Python 3.12.14의 표준 라이브러리에서 검증했습니다. strict 인수는 Python 3.10부터 지원합니다. 같은 순서로 대응하는 유한 자료를 예로 들며, 키 기반 결합은 별도 문제입니다.1. 기본 zip은 짧은 입력에서 멈춥니다names = ["A", "B", "C"]scores = [80, 90]print(list(zip(names, scores)))[('A', 80), ('B', 90)]C에 대응할 점수가 없어 세 번째 쌍이 나오지 않습니.. 2026. 10. 7.
Python bisect로 중복값 개수 찾기: 왼쪽·오른쪽 경계와 범위 검색 정렬된 리스트에서 값 2가 몇 번 나오는지 찾는다면, 일치하는 위치 한 개만 찾는 이진 탐색으로는 부족합니다. bisect_left로 시작 경계를, bisect_right로 끝 경계를 찾고 두 값의 차이를 구하면 중복 개수를 얻습니다.Python 3.12.14에서 실행했습니다. 표준 라이브러리만 사용하며 리스트가 오름차순으로 정렬되어 있다는 전제가 필요합니다.1. 경계 두 개로 중복 개수를 구합니다from bisect import bisect_left, bisect_rightvalues = [1, 2, 2, 2, 4, 7]x = 2left = bisect_left(values, x)right = bisect_right(values, x)print(left, right)print(values[left:ri.. 2026. 10. 6.
Python heapq 동점에서 TypeError가 날 때: 고유 순번으로 해결하기 heapq에 (우선순위, 작업)을 넣었는데 같은 우선순위에서 TypeError가 난다면, 작업 객체까지 비교되는 상황인지 확인하세요. 사전처럼 순서 비교가 안 되는 객체라면 (우선순위, 고유 순번, 작업)으로 구성하면 동점 비교를 순번에서 끝낼 수 있습니다.우선순위가 다를 때 정상 동작해도 같은 값이 처음 등장하면 오류가 날 수 있습니다. 이번 예제는 Python 3.12.14에서 사전 작업 두 개로 문제를 재현하고, 같은 우선순위의 입력 순서를 유지하는 방법을 확인합니다.1. 같은 우선순위에서만 오류가 생기는 최소 예제import heapqbad = []heapq.heappush(bad, (1, {"name": "first"}))try: heapq.heappush(bad, (1, {"name": .. 2026. 10. 5.
Python logging 중복 출력 해결: handlers와 propagate 확인 순서 logger.info()를 한 번 호출했는데 같은 로그가 두 줄 나온다면, 먼저 같은 logger에 handler를 여러 번 추가했는지, 다음으로 부모 logger에도 출력 handler가 있는지를 확인하세요. propagate=False는 부모로의 전달을 막지만, 같은 logger에 붙은 handler 중복까지 없애 주지는 않습니다.아래 실습은 Python 3.12.14의 새 프로세스에서 확인했습니다. 노트북·웹 프레임워크는 기존 설정이 있을 수 있으므로, 예제의 초기화 코드를 운영 애플리케이션에 그대로 복사하기보다 현재 구성을 먼저 살펴보는 것이 좋습니다.1. handler와 전파 경로 확인하기import logginglogger = logging.getLogger("demo.worker")root .. 2026. 10. 4.
같은 목적지까지의 최단거리: 역방향 BFS 한 번으로 여러 출발점 처리하기 서로 다른 출발점에서 같은 목적지까지의 최단거리를 여러 번 묻는다면, 출발점마다 BFS를 반복하기 전에 간선 방향을 뒤집어 보세요. 모든 이동 비용이 1인 방향 그래프에서는 역방향 그래프의 목적지에서 BFS를 한 번 수행하면 각 출발점의 답을 함께 구할 수 있습니다. 가중치를 처리하는 방법이 아니라 질문의 방향을 바꾸는 방법입니다. 1. 목적지에서 출발하는 질문과 목적지에 도착하는 질문은 다릅니다 정점은 0부터 6까지, 목적지는 5인 다음 방향 그래프를 사용하겠습니다. 모든 간선의 비용은 1이고, 적혀 있지 않은 반대 방향 이동은 허용되지 않습니다. 0 → 11 → 32 → 33 → 54 → 25 → 6 출발점 0에서는 0 → 1 → 3 → 5로 세 번 이동합니다. 출발점 2에서는 2 → 3 → 5로 두.. 2026. 10. 3.
0-1 BFS에서 visited만 쓰면 틀리는 이유: deque와 거리 갱신 실습 간선 비용이 0 또는 1이면, 먼저 발견한 경로가 항상 최소 비용인 것은 아닙니다. 일반 BFS의 ‘큐에 넣을 때 방문 처리’만 가져오면 나중에 찾은 더 싼 경로를 놓칠 수 있습니다. 0-1 BFS에서는 방문 여부 대신 현재까지의 최소 거리를 비교하고, 비용 0인 이동은 deque 앞에, 비용 1인 이동은 뒤에 넣습니다. 다섯 정점의 작은 그래프로 차이를 확인해 보겠습니다.1. 간선 한 개가 두 개보다 비쌀 수 있습니다다음 방향 그래프에서 출발점은 0입니다. 각 줄에 간선 비용을 적었으며, 반대 방향의 간선은 별도로 주어지지 않았습니다.0 → 1: 비용 10 → 2: 비용 02 → 1: 비용 01 → 3: 비용 1정점 4: 연결된 간선 없음0에서 1로 직접 가면 비용이 1입니다. 하지만 0 → 2 → 1.. 2026. 10. 2.
반응형