Python 3.12 Counter는 0이나 음수 count도 저장할 수 있습니다. 그러나 elements()는 count가 1보다 작은 항목을 결과에 포함하지 않습니다.

반복 결과에서 빠져도 해당 키가 Counter에서 삭제된 것은 아닙니다. 저장된 count를 읽는 일과 elements()의 출력 항목을 세는 일을 나누어야 합니다.

Counter의 저장 상태와 elements 결과는 다릅니다

collections.Counter는 해시 가능한 키를 저장하고 각 키의 count를 값으로 관리하는 dict 하위 클래스입니다. Python 3.12 문서는 count에 0이나 음수를 허용한다고 설명합니다. 또한 count를 0으로 설정해도 키 자체는 남으며, 실제로 키를 지우려면 del을 사용해야 합니다. 반면 elements()는 count가 1 미만인 항목을 반복 결과에서 건너뜁니다. 따라서 ‘Counter에 키가 있나?’와 ‘elements()가 그 키를 내놓나?’는 서로 다른 질문입니다.

양수만큼 반복하고 0과 음수는 건너뜁니다

과일 재고 count를 Counter에 저장한다고 가정하겠습니다. 배는 2개, 키위는 1개, 자두는 0개, 감은 -2개로 둘 수 있습니다. dict(counts)를 보면 네 항목이 모두 저장되어 있습니다. 하지만 elements()는 양수 count만큼 이름을 내보내므로 배 두 번과 키위 한 번만 나옵니다. 0개와 음수 개수의 키를 삭제하거나 수정하지는 않습니다.

Python 3.12 Counter에 저장된 값과 반복 요소를 비교하는 창작 예제입니다.
from collections import Counter

counts = Counter({"배": 2, "키위": 1, "자두": 0, "감": -2})
print(dict(counts))
print(list(counts.elements()))
print(counts["자두"], counts["감"])
각 키의 저장 count와 elements 반복 횟수
키저장 countelements 결과 횟수키 상태
배22유지
키위11유지
자두00키는 남음
감-20키는 남음

실행 결과에서 저장 상태는 {'배': 2, '키위': 1, '자두': 0, '감': -2}이고, 반복 결과는 ['배', '배', '키위']입니다. 마지막 print는 0과 -2를 보여 줍니다. 공식 API는 elements()가 각 요소를 count만큼 반복하며, count가 1보다 작은 요소는 무시한다고 정의합니다. 0과 음수도 자료구조 안에 유지할 수 있다는 점과 실제 요소 스트림에서 제외된다는 점을 함께 읽으면 문제를 정확히 풀 수 있습니다.

count를 먼저 읽고 반복 횟수로 바꿉니다

  1. Counter에 각 키의 count가 어떻게 들어 있는지 확인합니다.
  2. elements()가 묻는지 저장된 키가 묻는지 문제 문장을 구분합니다.
  3. count가 양수면 그 횟수만큼 결과에 적습니다.
  4. 0 또는 음수면 elements 결과에는 적지 않습니다.
  5. 키 삭제 여부가 필요하면 count가 아니라 키 존재 여부나 del 수행을 확인합니다.

이 절차를 따르면 count가 음수라는 이유만으로 오류가 난다거나 Counter에서 자동 삭제된다고 착각하지 않습니다. 문제에 list(c.elements())가 나오면 count를 반복 가능한 항목으로 바꾸는 단계입니다. c[key] 또는 dict(c)를 묻는다면 저장된 수치를 읽는 단계입니다. 또 Counter에서 산술 연산을 추가로 하면 각 연산이 0 이하 결과를 어떻게 다루는지 그 연산의 별도 문서 규칙을 확인해야 합니다. 여기서는 단순 저장과 elements() 동작만 다룹니다.

반복 결과에서 빠진 항목을 삭제했다고 단정하지 않습니다

자주 나오는 오해는 elements() 결과에 자두가 없으므로 Counter에서도 자두 키가 없다고 결론 내리는 것입니다. 반복 메서드는 출력에 포함할 조건을 적용할 뿐, 원본 Counter의 항목을 지우지 않습니다. 이 차이는 0개 count를 사용해도 키를 명시적으로 보관하려는 코드에서 중요합니다. 반대로 실제 삭제가 필요하다면 del counts[key]처럼 저장 객체를 변경하는 연산이 있어야 합니다. 출력만 보고 저장 상태를 역으로 추정하지 마세요.

반복 순서가 문제에 포함되면 양수 키들의 최초 입력 순서도 살펴보세요. Python 3.12 문서는 elements()가 첫 등장 순서로 요소를 반환한다고 설명합니다. 그러나 이번 질문의 핵심은 순서가 아니라 count의 부호에 따른 반복 횟수입니다. 저장값 표에서 양수·0·음수를 먼저 나누고, 결과 목록에는 양수 행만 옮기면 불필요한 계산을 줄일 수 있습니다.

정답을 가리고 확인해 보세요

이 글을 위해 만든 학습 예시이며 공식 기출문제나 판매 카드의 인용이 아닙니다.

Counter({'빵': 2, '물': 0, '주스': -1})에서 list(c.elements())는 무엇이며, 0·음수 키는 Counter에서 자동 삭제되나요?

정답과 해설 확인['빵', '빵']입니다. 물과 주스는 반복 결과에서 제외되지만 키는 자동 삭제되지 않습니다.

Counter는 0과 음수 count를 허용하며 elements()는 count가 1 미만인 요소를 무시합니다. 반복 결과에서 제외하는 것과 키를 삭제하는 것은 다른 동작입니다.