Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python – 리스트(행렬) 행 길이별 빈도 계산 방법

Python에서 중첩 리스트(행렬)의 각 행 길이별 빈도를 계산해야 하는 경우가 있습니다. 이때는 리스트를 반복(iteration)하면서 각 행의 길이를 확인하고, 해당 길이가 처음 등장하면 빈 딕셔너리에 추가하고, 이미 존재한다면 값을 1씩 증가시키는 방식으로 처리할 수 있습니다.

예제 코드

아래는 행 길이별 빈도를 계산하는 전체 예제입니다.

my_list = [[42, 24, 11], [67, 18], [20], [54, 10, 25], [45, 99]]

print("입력 리스트 :")
print(my_list)

my_result = dict()
for element in my_list:

   if len(element) not in my_result:
      my_result[len(element)] = 1

   else:
      my_result[len(element)] += 1

print("계산 결과 :")
print(my_result)

실행 결과

입력 리스트 :
[[42, 24, 11], [67, 18], [20], [54, 10, 25], [45, 99]]
계산 결과 :
{1: 1, 2: 2, 3: 3}

코드 설명

  • 먼저 여러 개의 내부 리스트를 포함하는 중첩 리스트를 정의하고, 콘솔에 출력합니다.

  • 빈도를 저장할 빈 딕셔너리(my_result)를 생성합니다.

  • 리스트를 반복하면서 각 요소(내부 리스트)의 길이를 len() 함수로 구합니다.

  • 해당 길이가 딕셔너리에 아직 없다면, 그 길이를 키로 하고 값을 1로 설정합니다.

  • 이미 존재하는 길이라면 기존 값에 1을 더해 빈도를 증가시킵니다.

  • 최종적으로 길이별 빈도가 담긴 딕셔너리가 콘솔에 출력됩니다.

위 실행 결과를 보면, 길이가 1인 행은 1개, 길이가 2인 행은 2개, 길이가 3인 행도 2개임을 한눈에 확인할 수 있습니다.

대안: collections.Counter 활용

같은 작업은 표준 라이브러리의 collections.Counter를 사용하면 더 간결하게 처리할 수 있습니다.

from collections import Counter

my_list = [[42, 24, 11], [67, 18], [20], [54, 10, 25], [45, 99]]

result = Counter(len(row) for row in my_list)
print(result)  # Counter({2: 2, 3: 2, 1: 1})

직접 반복문과 조건문을 작성하는 방식은 로직을 명확히 이해하는 데 도움이 되며, Counter를 사용하는 방식은 코드가 짧고 가독성이 좋다는 장점이 있습니다. 상황에 맞게 선택하여 사용하면 됩니다.