HOWTO · Python

목록 Python의 요소 수

이 자습서는 Python에서 목록의 요소를 계산하는 방법을 보여줍니다.

이 페이지의 내용

“리스트의 요소 개수를 센다”는 말은 서로 다른 세 가지 작업을 의미할 수 있으며, Python에는 각 작업에 바로 사용할 수 있는 도구가 있습니다. 전체 항목 수가 필요할 때는 len(), 특정 값의 등장 횟수가 필요할 때는 list.count(), 모든 값의 빈도를 한 번에 구해야 할 때는 collections 모듈의 Counter를 사용합니다. 딕셔너리와 수동 반복문을 사용해도 같은 빈도 결과를 만들 수 있으며, 개수가 어떻게 계산되는지 정확히 보여 줍니다. 이 튜토리얼은 실행 가능한 예제와 함께 각 방법을 살펴보므로 작업에 맞는 접근 방식을 선택할 수 있습니다.

len()로 전체 항목 수 구하기

내장 len() 함수는 리스트의 최상위 항목 수를 반환합니다. 숫자, 문자열, 불리언, 심지어 다른 리스트를 포함한 어떤 요소 타입이든 사용할 수 있습니다. 이 함수는 리스트 안의 값이 아니라 리스트 자체를 측정하기 때문입니다.

다음 예제를 실행해 보세요:

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

items = [10, "apple", 3.14, [1, 2, 3]]

print(len(items))
4

리스트에는 정수, 문자열, 부동 소수점 수, 중첩 리스트라는 네 개의 항목이 들어 있습니다. len()는 중첩 리스트 [1, 2, 3]가 바깥 수준에서는 하나의 항목으로 계산되므로 4를 반환합니다. 중첩 리스트 안에 저장된 항목까지 포함해야 한다면 먼저 구조를 평탄화하거나 내부 리스트의 길이를 따로 합산하세요. len()는 최상위 수준만 확인하고 그 안까지 들여다보지 않습니다.

list.count()로 특정 값의 개수 세기

list.count() 메서드는 주어진 값이 리스트에 몇 번 나타나는지 반환합니다. 찾으려는 값을 전달하면 리스트를 검색합니다:

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

my_list = [1, 2, 3, 2, 1, 4, 2]

print(my_list.count(2))
print(my_list.count(9))
3
0

값 2는 세 번 나타나지만 9는 한 번도 나타나지 않으므로 두 번째 호출은 0을 반환합니다. list.count()는 문자열과 혼합 데이터를 포함해 리스트가 담을 수 있는 모든 요소 타입에서 작동합니다.

두 가지 제한을 기억하세요. 각 호출은 하나의 값에 대한 질문에만 답하므로 서로 다른 세 값의 개수를 세려면 세 번 호출해야 합니다. 전체 빈도 분포가 필요하면 대신 Counter 또는 반복문을 사용하세요. 또한 중첩 리스트에서 list.count()는 전달한 값과 같은 최상위 항목만 일치시킵니다. 먼저 리스트를 평탄화하지 않으면 중첩 리스트 안에 저장된 값은 확인되지 않습니다.

Counter로 모든 값의 개수 세기

collections 모듈의 Counter 클래스는 한 번의 순회로 모든 값의 빈도 맵을 만듭니다. 이 클래스는 각 요소를 해당 개수에 매핑하는 딕셔너리처럼 동작합니다:

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

from collections import Counter

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = Counter(my_list)

print(element_count)
print(element_count[2])
print(element_count[9])
Counter({2: 3, 1: 2, 3: 1, 4: 1})
3
0

Counter는 딕셔너리처럼 인덱싱할 수 있지만 한 가지 유용한 차이가 있습니다. 한 번도 계산되지 않은 키를 읽어도 오류가 발생하지 않고 0을 반환하므로 element_count[9]는 안전하게 0을 출력합니다.

각 값은 내부적으로 딕셔너리 키가 되므로 모든 요소가 해시 가능해야 합니다. 정수, 문자열, 튜플은 해시 가능하지만 중첩 리스트는 해시 가능하지 않습니다. 해시할 수 없는 항목이 들어 있는 리스트라면 먼저 항목을 해시 가능한 형태로 변환하거나 다른 방법으로 개수를 세어야 합니다.

반복문으로 빈도 딕셔너리 만들기

일반 반복문과 딕셔너리로도 같은 빈도 결과를 얻을 수 있으며 계산 과정을 직접 확인할 수 있습니다. 딕셔너리를 초기화한 다음 리스트를 순회하면서 각 요소의 개수를 증가시킵니다:

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

my_list = [1, 2, 3, 2, 1, 4, 2]
element_count = {}

for element in my_list:
    if element in element_count:
        element_count[element] += 1
    else:
        element_count[element] = 1

print(element_count)
{1: 2, 2: 3, 3: 1, 4: 1}

결과는 각 값을 그 개수에 매핑합니다. 2는 세 번, 1은 두 번 나타나고 3과 4는 한 번씩 나타납니다. 이 패턴은 리스트를 한 번만 순회하면서도 모든 과정을 직접 제어할 수 있게 합니다. 개수를 세기 전에 각 요소를 변형하거나, 선택한 값을 건너뛰거나, 단순한 개수 대신 다른 값을 누적할 수도 있습니다. 여기에도 같은 해시 가능성 제약이 적용됩니다. 모든 요소가 딕셔너리 키가 되므로 중첩 리스트처럼 해시할 수 없는 항목은 먼저 변환하거나 평탄화해야 합니다.

어떤 도구를 사용할지 선택하려면 질문에 맞는 방법을 고르세요. 전체 항목 수에는 len(), 특정 값 하나에는 list.count(), 전체 빈도 맵에는 Counter 또는 딕셔너리 반복문을 사용하세요.