Я бы поспорил, что это скорее проблема алгоритма, чем специфичная для python, но один алгоритм, который приходит мне в голову и который кажется достаточно простым, состоит в сортировке списка и создании «сегментов» (подсписков). ), которые начинаются с элемента max и добавляются с начала списка до тех пор, пока его нельзя будет добавить.
В Python это может выглядеть примерно как список
x = [1.5, 3, 4, 2.5 , 1, 4, 0.5]
x.sort()
buckets = []
while True:
# if the list is empty, break
if x == []:
break
last_elem = x.pop() # pop removes the last element and returns it
new_bucket = [last_elem] # create a new bucket initially with just that
new_bucket_sum = last_elem
# for the remaining numbers
num_added = 0
for num in x:
if num + new_bucket_sum > 5:
break
new_bucket.append(num) # add it to the sub-list
new_bucket_sum += num # account for the sum
num_added += 1 # increase our count for this iteration
buckets.append(new_bucket) # add the bucket
x = x[num_added:] # take a sub-list of x (getting rid of the numbers added)
# Note that we now recurse until all numbers have been placed in to buckets
# After this for loop breaks, you have all the buckets
print(buckets)
Это был мойинстинкт. Я бы сказал, что для написания этого алгоритма есть более «питонические» способы, но так как вы новичок в Python, я подумал, что было бы полезно разбить его и прокомментировать. Там также могут быть лучшие алгоритмы там. Приветствия