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
我需要对一些方面按重要性排序,评估重要性的方式是数字,因此我想将这些方面按百分比从高到低划分。
我会更好地解释自己。这是按重要性排序的方面,如您所见,我想通过递减的百分比值自动表示每个方面,总和当然是 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