리스트에서 각 요소보다 크거나 같은 숫자가 몇 개 있는지 그 빈도를 구해야 하는 경우, 리스트 컴프리헨션(list comprehension)과 sum 메서드를 조합하면 간단하게 해결할 수 있습니다.
아래는 실제 동작 예시입니다.
예제
my_list = [24, 13, 72, 22, 12, 47]
print("The list is :")
print(my_list)
my_result = [sum(1 for element in my_list if index <= element) for index in my_list]
print("The result is :")
print(my_result)출력 결과
The list is : [24, 13, 72, 22, 12, 47] The result is : [3, 5, 1, 4, 6, 2]
코드 설명
정수로 구성된 리스트를 정의한 뒤 콘솔에 출력합니다.
리스트 컴프리헨션을 사용해 리스트의 각 값을 하나씩 순회하면서, 현재 값보다 크거나 같은 요소가 리스트 안에 몇 개 있는지 셉니다.
조건을 만족할 때마다 1을 더하고, sum 메서드로 합산한 결과를 새 리스트에 저장합니다.
최종 결과 리스트를 콘솔에 출력합니다.
동작 원리 살펴보기
예를 들어 첫 번째 요소인 24의 경우, 리스트 전체에서 24 이상인 값은 24, 72, 47로 총 3개입니다. 따라서 결과 리스트의 첫 번째 값이 3이 됩니다. 마찬가지로 가장 작은 값인 12는 나머지 모든 요소보다 작거나 같으므로 빈도가 6으로 계산됩니다.
이 방식은 별도의 반복문 없이 한 줄의 코드로 처리할 수 있어 코드가 간결하다는 장점이 있습니다. 다만 각 요소마다 리스트 전체를 다시 순회하므로 시간 복잡도는 O(n²)이며, 데이터 크기가 매우 클 경우에는 정렬 후 이진 탐색을 활용하는 편이 더 효율적일 수 있습니다.