Код Python для разделения списка аспектов по процентам важности

#python #python-3.x #arraylist #percentage

Вопрос:

Мне нужно упорядочить ряд аспектов по их важности, способ оценки этой важности численный, поэтому я хочу разделить эти аспекты на проценты от самого высокого до самого низкого.

Я собираюсь объясниться получше. Это аспекты, упорядоченные по важности, как вы можете видеть, я хочу автоматически представлять каждый из аспектов уменьшающимся процентным значением, общая сумма которого, конечно, равна 100%:

 Python ----------> 40 %

RobotFramework --> 30 %

C ---------------> 20 %

JavaScrip -------> 10 %
 

И это сам код:

 Quantity_Of_Aspects = 5
Total_Percentage = 100
List_Of_Percentages = []
i = Quantity_Of_Aspects


while Quantity_Of_Aspects > 1:
    Biggest_Percentage = Total_Percentage / (i - 1)
    i = i   1
    Quantity_Of_Aspects = Quantity_Of_Aspects - 1
    Total_Percentage = Total_Percentage - Biggest_Percentage
    List_Of_Percentages.append(Biggest_Percentage)

print(List_Of_Percentages)
 

К настоящему времени это дает мне это:
[25.0, 15.0, 10.0, 7.142857142857143]

Как вы можете заметить, это даже не составляет 100% и не показывает мне 5 аспектов, которые я хочу, может ли кто-нибудь помочь мне с этим, пожалуйста?

Ответ №1:

Вам нужна функция, которая дает вам список процентов, которые суммируются до 100%, с параметром для длины списка (т. Е. количества компонентов).:

 def percents(n, total_percent=100):
    assert isinstance(n, int) and n > 0
    return [x / sum(range(n 1)) * total_percent for x in range(1, n 1)]
 

Результат:

 percents(4)
# > [10.0, 20.0, 30.0, 40.0]

percents(8)
# > [2.7777777777777777,
#    5.555555555555555,
#    8.333333333333332,
#    11.11111111111111,
#    13.88888888888889,
#    16.666666666666664,
#    19.444444444444443,
#    22.22222222222222]

sum(percents(45))
# > 100.0
 

Ответ №2:

Переформулируя свою проблему, вы хотите, чтобы предпоследнее число было двойным по сравнению с последним, третье последнее-тройным и т. Д. Мы можем создать такой арифметический ряд с numpy помощью, а затем нормализовать его:

 import numpy as np

Quantity_Of_Aspects = 5
Total_Percentage = 100

List_Of_Percentages = np.arange(Quantity_Of_Aspects, 0, -1) 
#> [5,4,3,2,1]    
List_Of_Percentages = List_Of_Percentages/np.sum(List_Of_Percentages) * Total_Percentage 
#> [5,4,3,2,1] / (5 4 3 2 1) * 100

 

Для Quantity_Of_Aspects=5 этого получается: array([33.33, 26.67, 20. , 13.3, 6.67]) , что в сумме составляет 100. Если вам это нужно в list формате, вы можете это сделать list(List_Of_Percentages) .