#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)
.