Вы можете использовать список списков и numpy, чтобы облегчить решение этой проблемы
import numpy as np
#List of lists from good, opportunity and bad
li = [[500,400,300],[300,200,100],[100,50,20]]
#Convert list to numpy arr
arr = np.array(li)
#Calculate total
total=[x + y + z for x, y, z in zip(*li)]
#Use numpy.divide to divide each element of list by total
print([np.divide(li[idx], total[idx]) for idx in range(3)])
Выход будет тогда
[array([0.55555556, 0.44444444, 0.33333333]),
array([0.46153846, 0.30769231, 0.15384615]),
array([0.23809524, 0.11904762, 0.04761905])]
Вы также можете присваивать свои проценты переменным следующим образом
perc_good, perc_opportunity, perc_bad = [np.divide(li[idx], total[idx]) for idx in range(3)]
print(list(perc_good))
print(list(perc_opportunity))
print(list(perc_bad))
Выход будет
[0.5555555555555556, 0.4444444444444444, 0.3333333333333333]
[0.46153846153846156, 0.3076923076923077, 0.15384615384615385]
[0.23809523809523808, 0.11904761904761904, 0.047619047619047616]