-
2023.7.8. / 최빈값 구하기와 Python의 내장 클래스, CounterTIL( Today I Learned) 2023. 7. 7. 23:02
최빈값 구하기
문제
최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.
정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요.
최빈값이 여러 개면 -1을 return 합니다.
풀이
from collections import Counter
<-collections 모듈의 Counter 클래스를 사용하여 배열에서 각 값의 발생 횟수를 계산할 수 있습니다.
def solution(arr): <-함수 정의
counter = Counter(arr) # Count the occurrences of each value<-Counter 클래스는 arr 배열에서 각 값의 발생 횟수를 계산하는 데 사용됩니다.
배열의 각 고유 값이 키이고 해당 값이 해당 값인 사전과 유사한 객체를 생성합니다.
frequencies = counter.values() # Get the frequency of each value<- frequencies = counter.values(): values() 메서드를 사용하여 Counter 개체에서
각 값의 빈도를 추출합니다. 이것은 우리에게 주파수 모음을 제공합니다.
max_frequency = max(frequencies) # Find the maximum frequency
modes = [value for value, frequency in counter.items() if frequency == max_frequency]
if len(modes) > 1:
return -1 # Multiple modes, return -1
else:
return modes[0] # Single mode, return the mode
# Example usage:
arr = [1, 2, 3, 2, 4, 4, 4, 5, 6, 5]
print(solution(arr)) # Output: 4Python의 view 개체는 사전, 목록 또는 집합과 같은 컬렉션의 요소에 대한 보기를 제공하는 동적 개체입니다. 원본 컬렉션의 특정 하위 집합 또는 측면을 나타내며 새 복사본을 만들지 않고도 기본 데이터에 액세스할 수 있습니다. view 개체는 일반적으로 컬렉션 요소에 액세스하는 보다 효율적이고 메모리 친화적인 방법을 제공하기 위해 특정 메서드 또는 작업에 의해 반환됩니다.
뷰 객체의 몇 가지 중요한 특성은 다음과 같습니다.
- 동적: 보기 개체는 원본 컬렉션에 대한 변경 사항을 반영합니다. 원본 컬렉션이 수정되면 뷰 개체도 해당 변경 사항을 반영합니다.
- 반복성: 뷰 개체는 루프 또는 기타 반복 가능한 작업을 사용하여 반복될 수 있습니다. 보기에 포함된 요소에 액세스할 수 있습니다.
- 인덱싱 불가능: 사전의 values() 메서드에 의해 반환된 뷰를 포함하여 대부분의 뷰 객체는 인덱싱을 지원하지 않습니다. 즉, view[0]과 같은 인덱스를 사용하여 개별 요소에 액세스할 수 없습니다.
- 메모리 효율적: 보기 개체는 데이터의 새 복사본을 만들지 않습니다. 대신 기존 데이터에 대한 보기 또는 참조를 제공하여 메모리 소비를 줄입니다.
- 게으른 평가: 보기 개체는 일반적으로 필요한 경우에만 주문형 작업 또는 계산을 수행합니다. 이렇게 하면 불필요한 계산을 사전에 방지하여 성능을 향상시킬 수 있습니다.
사전의 values() 메서드의 경우 사전의 값에 대한 액세스를 제공하는 뷰 객체를 반환합니다. 특정 순서로 값에 액세스하거나 추가 작업을 수행해야 하는 경우 보기 개체를 반복하거나 목록으로 변환할 수 있습니다.
전반적으로 보기 개체는 추가 복사본을 만들지 않고 컬렉션의 요소에 액세스하고, 메모리를 보존하고, 원본 컬렉션에 대한 변경 사항을 반영하려는 경우에 유용합니다.
from collections import Counter
# 과일 리스트 생성
fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
# Counter를 사용하여 각 과일의 발생 빈도(count)를 계산
fruit_counter = Counter(fruits). <----- Counter()함수가 중요 ()안에 들어가는 리스트 형태 => fruits
# 각 과일의 빈도(count)를 출력!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for fruit, count in fruit_counter.items(): <===== 순서쌍 apple, 3 / banana,2 / orange, 1/
print(f"{fruit}은(는) {count}번 등장합니다.")
# 출력:
# apple은(는) 3번 등장합니다.
# banana은(는) 2번 등장합니다.
# orange은(는) 1번 등장합니다.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
또다른 Counter() 함수의 예,
from collections import Counter
arr = [1, 2, 3, 1, 2, 3, 4, 5, 4, 3, 2]
counter = Counter(arr) <-- 리스트형 arr 을 빈도를 헤아려서 넣는다
# Print the frequencies of values
for value, count in counter.items():
print(f"{value}: {count}")
# Output:
# 1: 2
# 2: 3
# 3: 3
# 4: 2
# 5: 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
from collections import Counter
arr = [1, 2, 3, 1, 2, 3, 4, 5, 4, 3, 2]
counter = Counter(arr) #<-- 리스트형 arr 을 빈도를 헤아려서 넣는다
print(counter)print(type(counter))
# Print the frequencies of values
for value, count in counter.items():
print(f"{value}: {count}")Counter({2: 3, 3: 3, 1: 2, 4: 2, 5: 1}) <class 'collections.Counter'> 1: 2 2: 3 3: 3 4: 2 5: 1Python의 collections.Counter 클래스는 컬렉션의 요소(예: 목록, 튜플 또는 문자열)의 발생 횟수를 계산하는 편리한 방법을 제공합니다. 요소가 키로 저장되고 개수가 값으로 저장되는 정렬되지 않은 사전처럼 작동하는 특수 컨테이너입니다.
'카운터' 클래스는 카운트 데이터를 조작하고 분석하기 위한 다양한 메서드와 작업을 제공합니다. 주요 기능 중 일부는 다음과 같습니다.
- 요소 계산: '카운터'의 기본 기능은 컬렉션에서 요소의 발생을 계산하는 것입니다. 각 고유 요소에 대한 개수를 자동으로 유지합니다.
- 개수 접근: 사전 조회와 유사하게 요소를 키로 사용하여 특정 요소의 개수에 접근할 수 있습니다. 개수는 정수로 반환됩니다.
- 개수 업데이트: '카운터' 개체는 더하기, 빼기 및 교차 작업을 지원하여 개수를 결합하고 수정할 수 있습니다.
- 일반적인 작업: '카운터'는 가장 일반적인 요소와 개수를 검색하고, 개수에 대한 산술 연산을 수행하고, 카운터를 다양한 데이터 구조로 변환하는 메서드를 제공합니다.
Counter 클래스는 Python의 표준 라이브러리에 있는 collections 모듈의 일부입니다. 컬렉션에서 요소의 발생을 효율적으로 계산하고 해당 개수를 기반으로 작업을 수행해야 할 때 유용한 도구입니다.
Regenerate response'TIL( Today I Learned)' 카테고리의 다른 글
7.10.월요일 - 데이타 오류 경험 (0) 2023.07.10 2023.7.8.토요일 (0) 2023.07.10 2023.7.7. 금요일 - map() 함수 & lambda() 함수 (0) 2023.07.07 2023.7.6.목요일 (0) 2023.07.06 2023.7.5.수요일 (0) 2023.07.06