On Sun, 8 Nov 2009, Ozz wrote: > > Hi, > > > My first question is: > > 1. given a list of invoives I=[500, 400, 450, 200, 600, 700] and a > > check Ch=600 > > how can I print all the different combinations of invoices that the > > check is possibly cancelling > > Incidentally, I'm currently learning python myself, and was working > on more or less the same problem as an exercise; > > For listing all different subsets of a list (This is what I came up > with. Can it be implemented shorter, btw?): > > def subsets(L): > S = [] > if (len(L) == 1): > return [L, []] > else: > for s in subsets(L[1:]): > S.append(s) > S.append(s + [ L[0]]) > return S > > Now, to use the above piece of code (after 'import subset'): > > >>> subset.subsets([4,7,8,2]) > [[2], [2, 4], [2, 7], [2, 7, 4], [2, 8], [2, 8, 4], [2, 8, 7], [2, 8, 7, 4], > [], [4], [7], [7, 4], [8], [8, 4], [8, 7], [8, 7, 4]] > >>> map(sum,subset.subsets([4,7,8,2])) > [2, 6, 9, 13, 10, 14, 17, 21, 0, 4, 7, 11, 8, 12, 15, 19] > > It's not a real solution yet, and as others have pointed out the > problem is NP complete but it might help to get you going.
does your solution allow for the possibility of different invoices of equal amounts? i would be reluctant to use the word "subset" in a context where you can have more than one element with the same value. rday -- ======================================================================== Robert P. J. Day Waterloo, Ontario, CANADA Linux Consulting, Training and Kernel Pedantry. Web page: http://crashcourse.ca Twitter: http://twitter.com/rpjday ======================================================================== -- http://mail.python.org/mailman/listinfo/python-list