Python 按重要性百分比划分方面列表的代码

Python code to divide a list of aspects by percent of importance

我需要对一些方面按重要性排序,评估重要性的方式是数字,因此我想将这些方面按百分比从高到低划分。

我会更好地解释自己。这是按重要性排序的方面,如您所见,我想通过递减的百分比值自动表示每个方面,总和当然是 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 个方面,有人可以帮我解决这个问题吗?

重构你的问题,你希望倒数第二个是最后一个的两倍,倒数第三个是三倍,等等。我们可以用 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).

您想要一个函数,它为您提供总和为 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