Given that I have a list of numbers:
JavaScript
x
2
1
raw_list = [10, 9, 2, 8, 1, 3, 5, 4, 6, 7,11]
2
I want to separate it to top N’s three times. Which means I want to rank them.
JavaScript
1
6
1
# Top 6 rank as 3
2
# Next Top 4 rank as 2
3
# Last Top 1 rank as 1
4
5
ranked_list = [3, 3, 2, 3, 1, 2, 2, 2, 3, 3, 3]
6
What I tried:
JavaScript
1
2
1
sorted(range(len(raw_list)), key=lambda i: raw_list[i])[-2:]
2
But this only gives indeces of the topmost and not the next topmost value of the list.
Advertisement
Answer
Use:
JavaScript
1
13
13
1
lst = [10, 9, 2, 8, 1, 3, 5, 4, 6, 7, 11]
2
indices = sorted(range(len(lst)), key=lambda i: lst[i], reverse=True)
3
ranked_list = [0 for _ in range(len(lst))]
4
for i, j in enumerate(indices):
5
if i < 6:
6
ranked_list[j] = 3
7
elif i < 6 + 4:
8
ranked_list[j] = 2
9
else:
10
ranked_list[j] = 1
11
12
print(ranked_list)
13
Output
JavaScript
1
2
1
[3, 3, 2, 3, 1, 2, 2, 2, 3, 3, 3]
2