+참고하세요) [python example #4-1] dictionary자료형을 사용하여 최빈값 뽑아내기

[PYTHON] 최빈값 출력하기 - dictionary사용안하고 list만 사용

이전에 포스팅한 [dictionary자료형을 사용하여 최빈값 뽑아내기 #4-1]보다 간단한 방법이에요 참고바랍니다.~

 

  • 문제 -> #4-1 포스팅과 같음

숫자로 이루어진 list에서 가장 많이 등장한 최빈값을 출력하세요

최빈값 1개 vs 최빈값 여러개 구별하기

  • 알고리즘 표현 -> #4-1포스팅과 다르니 읽어봐주세요!

1. input = [2,2,2,5,5,5,6,6,6,6,6,6,9,9,11,11,11,11,11,11]

 

2. input의 최댓값만큼 [0]으로만 이루어진 새로운 list를 만든다.

-> my_list라고 할 것

 

3. input의 각 값을 my_list의 위치라고 생각한다.

>> input값 = my_list의 위치값

 

ex) input의 첫번째 숫자인 4의 경우, 

my_list의 4번째(index는3 일 것) 값을 +1을 한다.

즉, input의 값이 나올때마다 my_list의 input의 값과 같은 위치에 값을 +1씩 증가시킨다.

 

4. 만약 my_list의 10번째(index는 9일 것)값이 5라면 input의 10이라는 숫자가 5번 나온 것이다.

 

  • input

[2,2,2,5,5,5,6,6,6,6,6,6,9,9,11,11,11,11,11,11]

 

>> 쉬운 이해를 위해 간단하게 구성

 

★경우 1) 최빈값이 1개인 경우

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
input = [2,2,2,5,5,5,6,6,6,6,6,6,9,9,11,11,11,11,11,11]
 
max_input = max(input)
my_list = [0* max_input
print(my_list) #11개가 생김
for i in input:
    my_list[i-1+= 1 #input의 값 = my_list의 위치값, 나올때마다 +1하는 
    #i-1을 하는 이유는 파이썬의 index는 0부터 시작하기 때문이다.
    #즉 input의 1의 값은 my_list의 첫번째 index인 0번 index에서 +1을 하기위해서이다.
print(my_list)  
#[0, 3, 0, 0, 3, 6, 0, 0, 2, 0, 6]
#2-3번, 5-3번, 6-6번, 9-2번, 11-6번 나옴
 
#-------------경우1, 2의 다른 부분 ---------------#
print('my_list의 index를 1부터라고 했을 때, 최빈값은 %d 이며, 총 %d번 나왔다'
 % (my_list.index(max(my_list))+1,max(my_list) ))
#list.index(인덱스번호 알고싶은값) => list에서 가장 최댓값의 index를 구하는 함수
#my_list.index(max(my_list)) 이 함수는 첫번째 최빈값만 불러옴.
#------------------------------------------------#
cs
  • 결과값

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 3, 0, 0, 3, 6, 0, 0, 2, 0, 6]
input 리스트에서, 최빈값은 6 이며, 총 6번 나왔다

 

★경우 2) 최빈값이 여러개인 경우

  rf) 참고로, 이 문제는 최빈값이 두개임. : 6 & 11

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
input = [2,2,2,5,5,5,6,6,6,6,6,6,9,9,11,11,11,11,11,11]
 
max_input = max(input)
my_list = [0* max_input
print(my_list) #11개가 생김
for i in input:
    my_list[i-1+= 1 #input의 값을 my_list의 index라고 하고 나올때마다 +1하는 것이다.
    #i-1을 하는 이유는 파이썬의 index는 0부터 시작하기 때문이다.
    #즉 input의 1의 값은 my_list의 첫번째 index인 0번 index에서 +1을 하기위해서이다.
print(my_list)  
#[0, 3, 0, 0, 3, 6, 0, 0, 2, 0, 6]
#2-3번, 5-3번, 6-6번, 9-2번, 11-6번 나옴
 
#-------------경우1, 2의 다른 부분----------------#
num = 0 #최빈값의 개수
my_most = 0 #최빈값을 알기 위한 변수 -my_list의 위치 반환
for k in my_list:
    my_most += 1 #my_list의 위치값 = input의 값
    if k == max(my_list):
        num += 1 #최빈값이 나올때만 증가시킴
        print('input 리스트에서, 여러 최빈값중 %d번째 최빈값은 %d 이며, 총 %d번 나왔다.'
              % (num, my_most,max(my_list)))
        
print('이 input리스트에서 최빈값의 개수는 %d개 이다' % num)
#------------------------------------------------#
cs
  • 결과값

[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 3, 0, 0, 3, 6, 0, 0, 2, 0, 6]
input 리스트에서, 여러 최빈값중 1번째 최빈값은 6 이며, 총 6번 나왔다.
input 리스트에서, 여러 최빈값중 2번째 최빈값은 11 이며, 총 6번 나왔다.
이 input리스트에서 최빈값의 개수는 2개 이다

 

  • 배울코드

1. list의 위치값은 index-1 이라는 것을 이해하기

2. list의 위치값을 input값이라고 생각하기

3. list.index(위치를 알고 싶은 값) = 위치 반환 > 리스트의 index구하는 코드 이해하기

 

*)

어떤 피드백이든 댓글부탁드립니다.

더 좋은 방법이 있다면 알려주세요.

도움이 되셨다면, 하트버튼 또는 댓글부탁드려요~

요청할 문제가 있다면 댓글 부탁드려요!!!

*(

 

 

+ Recent posts