それぞれが値を持つサブリストのリストをどのように均等に配布しますか?
次のリストを 3 つのリストに分けて配布したいと思います。
lst = [['a',10],['b',40],['c',10],['d',30],['e',20],['f',100],['g',90],['h',4]]
すべての値の合計は 304 なので、3 つのリストを合計すると約 101.3 になります。
これは何らかの形で生み出したい結果です。
lst1 = [['g',90],['a',10]]
lst2 = [['f',100],['h',4]]
lst3 = [['b',40],['c',10],['d',30],['e',20]]
これは私がこれまでに解決したソリューションですが、高速化するにはいくつかの作業が必要です。
def ListSum(lst):
lst = map(lambda subli: subli[1],lst)
return sum(lst)
def EvenlyDistribute(lst):
#put into bucket until reached, then move to the next bucket
Lst1 = []
Lst2 = []
Lst3 = []
for subli in lst:
try:
if ListSum(Lst1) < 100:
Lst1.append(subli)
elif ListSum(Lst2) < 100:
Lst2.append(subli)
else:
Lst3.append(subli)
except:
pass
print Lst1
print Lst2
print Lst3