• 문제 :

fruits = ['apple','grape','strawberry','banana'] 4개의 과일이 있다

내가 가지고 있는 과일 리스트에서 각각의 과일들이 몇개 있는지 알아보고,

가장 많은 과일들을 순서대로 알아보자.

같은 수의 과일이라면 과일명을 기준으로 내림차순으로 나타내어라

fruits중 내가 가지고 있지 않은 과일은 제외하자

 

  • 내가 가지고 있는 과일 리스트

my_fuit_list = ['apple', 'grape', 'strawberry', 'strawberry', 'apple', 'apple', 'apple']

 

apple : 2개

grape : 3개

strawberry : 2개

banana: 0개

 

  • 답은

answer =  ['grape','apple','strawberry'] # 바나나는 없으므로 제외한다.

 

 

  • 코딩
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
26
27
28
29
30
31
32
## prerequisite
fruits = ['apple','grape','strawberry','banana']
my_fruit_list = ['apple''grape''strawberry''strawberry''grape''grape''apple']
 
## code from here
my_list = []
answer = [] # answer will be ['grape', 'strawberry', 'apple']
def solution(fruits, my_fruit_list):
    for i in range(len(fruits)):
        my_list.append([fruits[i],0])
    print(my_list) #[['apple', 0], ['grape', 0], ['strawberry', 0], ['banana', 0]]
    for i in range(len(my_fruit_list)):
        for j in range(len(fruits)):
            a = my_fruit_list[i]
            b = my_list[j][0]
            if a == b:
                my_list[j][1+= 1
                break
    print(my_list) # [['apple', 2], ['grape', 3], ['strawberry', 2], ['banana', 0]] / not yet sorted
    my_list.sort(key=lambda x:(x[1], x[0]), reverse=True)
    # my_list.sort(key=lambda x:(-x[1], -x[0]))
    ## checkpoint : 1. '-' means reverse 2. first sort by x[1](count) and then if there is same value, sort by x[0](name)
    print(my_list) # [['grape', 3], ['strawberry', 2], ['apple', 2], ['banana', 0]]
 
    for fruit, i in my_list:
        if i != 0# except for no fruit
            answer.append(fruit)
    print(answer)
    return answer
 
print('answer is ',solution(fruits,my_fruit_list))
 
cs

 

  • 정렬방법

2차원 배열을 정렬할 경우 key를 사용하여 정렬한다.

내림차순일 경우, reverse = True를 붙이거나 '-'부호를 붙인다.

 

my_list.sort(key=lambda x:(x[1], x[0]), reverse=True)

or

my_list.sort(key=lambda x:(-x[1], -x[0]))

 

 

  • example

my_list = [['apple', 2], ['grape', 3], ['strawberry', 2], ['banana', 0]]

| |

my_list.sort(key=lambda x:(x[1]x[0])reverse=True)

| |

my_list = [['grape', 3], ['strawberry', 2], ['apple', 2], ['banana', 0]]

 

# x[1]인 숫자대로 내림차순 후에, strawberry와 apple의 x[1]이 같기 때문에

# x[0]인 과일의 이름으로 내림차순을 한 결과이다.

 

+ Recent posts