Decimalでは誤差が生じるのでこの用途には適してません。有限桁数の小数フォーマットは無限小数を表現できないため、他の方の回答のように有理数で処理するか、何らかの丸めの方法を考慮する必要があります。
ご指摘いただいたKSwordOfHaste様、ありがとうございました。
以下誤回答の記録
デフォルトのfloat型(浮動小数点型)で表現する限り、どうやっても計算誤差は出ます。
お望みなら、decimalモジュールを用いて正確に計算することはできます。
python
1>>> from decimal import Decimal
2>>> import random
3>>> lst = [Decimal(random.randint(0,49)) for _ in range(10)]
4>>> lst
5[Decimal('32'), Decimal('25'), Decimal('15'), Decimal('30'), Decimal('1'), Decimal('37'), Decimal('47'), Decimal('42'), Decimal('38'), Decimal('12')]
6>>> sum_lst = sum(lst)
7>>> [x/sum_lst for x in lst]
8[Decimal('0.1146953405017921146953405018'), Decimal('0.08960573476702508960573476703'), Decimal('0.05376344086021505376344086022'), Decimal('0.1075268817204301075268817204'), Decimal('0.003584229390681003584229390681'), Decimal('0.1326164874551971326164874552'), Decimal('0.1684587813620071684587813620'), Decimal('0.1505376344086021505376344086'), Decimal('0.1362007168458781362007168459'), Decimal('0.04301075268817204301075268817')]
9>>> sum([x/sum_lst for x in lst])
10Decimal('1.000000000000000000000000000')
11>>> float(sum([x/sum_lst for x in lst]))
121.0
9.4. decimal — 十進固定及び浮動小数点数の算術演算 — Python 3.6.5 ドキュメント
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。