How do I get a list of every possible combination of product prices to reach a target cost?

后端 未结 2 1046

Suppose I have a list of three products (A, B C). Each Product has a price. Given a total cost, I want to find all the possible product combinations to equal exactly that co

相关标签:
2条回答
  • 2021-01-15 02:01

    The itertools module offers combinatoric generators to help with problems such as this:

    >>> from itertools import *
    >>> prices = dict(a=10, b=15, c=8, d=2, e=5)
    >>> total_cost = 20
    >>> for r in range(1, 30):
            for t in combinations_with_replacement(prices, r):
                    cost = sum(prices[p] for p in t)
                    if cost == total_cost:
                            print t
    
    0 讨论(0)
  • 2021-01-15 02:22
    def possibilities(available_products, target_price):
        if target_price == 0 or not available_products:
            return []
        this_price = available_products[0]
        remaining_products = available_products[1:]
        results = []
        for qty in range(1 + target_price / this_price):
            remaining_price = target_price - qty*this_price
            if remaining_price == 0:
                results.append([qty] + [0] * len(remaining_products))
            else:
                for option in possibilities(remaining_products, remaining_price):
                    results.append([qty] + option)
        return results
    

    That gives you:

    pprint.pprint(possibilities([1, 2, 5], 10))
    [[0, 0, 2],
     [0, 5, 0],
     [1, 2, 1],
     [2, 4, 0],
     [3, 1, 1],
     [4, 3, 0],
     [5, 0, 1],
     [6, 2, 0],
     [8, 1, 0],
     [10, 0, 0]]
    
    0 讨论(0)
提交回复
热议问题