On 5 Sep 2010, at 22:31 , Micheal Beatty wrote: > On 09/05/2010 03:16 PM, Evert Rol wrote: >>>>>>> I'm having a little problem figuring out how to accomplish this simple >>>>>>> task. I'd like to take a list of 6 numbers and add every permutation of >>>>>>> those numbers in groups of four. For example for 1, 2, 3, 4, 5, 6 add 1 >>>>>>> + 1 + 1 +1 then 1 + 1 + 1 +2 etc. until reaching 6 + 6 + 6 + 6. Using a >>>>>>> for loop, that was the easy part, now I'd like to take the results and >>>>>>> count the number of times each number occurs. >>>>>>> My problem occurs when I try to create a list from the results of the >>>>>>> for loop, it puts each individual number into its own list. I've looked >>>>>>> everywhere for the solution to this and can find nothing to help. >> <snip /> >> >>>>>>> here is the code. >>>>> >>>>> fourdsix = [1, 2, 3, 4, 5, 6] >>>>> for i in fourdsix: >>>>> for j in fourdsix: >>>>> for k in fourdsix: >>>>> for l in fourdsix: >>>>> fourdsix_result = [i, j, k, l] >>>>> attribs = sum(fourdsix_result) - min(fourdsix_result) >>>>> print attribs >>>>> >>>>> This gives me the proper results, >>>> I'm not sure I understand that, because now you have a subtraction here; >>>> not sure what that does. >>> It removes the lowest number in the group of 4. It's intended to replicate >>> rolling four six sided dice, eliminating the lowest number and adding the >>> remaining 3 dice roll results. I didn't mention it cause I felt it wasn't >>> germane to the problem and it might needlessly complicate the situation. >> <snip /> >> >>>>> attrib_list = [] >>>>> attrib_list.append(attribs) >>>>> print attrib_list >>>> This one should work, unless you've put it incorrectly inside the code. >>>> But otherwise, it will create the list you're looking for. >>>> So then it's a matter of stepping through the numbers inside the list and >>>> counting their occurrences. >>> I've tried this in every place in the code, outside the loop, inside at >>> each step of the loop and none of them get me what I want. Andre's >>> suggestion that I put the empty list before the loop helped but it's still >>> giving me multiple lists. >> Can you send what you currently have? Sounds like you still have the first >> statement at some incorrect place in your code. >> >> > Here is what I have. > > # Program to determine frequency of each possible 4d6 die roll > > attrib_list = [] > fourdsix = [1, 2, 3, 4, 5, 6] #list of possible 1d6 die roll results > for i in fourdsix: > for j in fourdsix: > for k in fourdsix: > for l in fourdsix: > fourdsix_result = [i, j, k, l] # creating list from loop > results > attribs = sum(fourdsix_result) - min(fourdsix_result) > attrib_list.append(attribs) > print attrib_list > > > This gets me multiple lists running through the loop.
Have you tried printing attrib_list at the very end of your code, *outside* all the nested loops? I also noticed a mistake in a previous answer: >>> map(sum, combinations_with_replacement(range(1,7), 4)) doesn't really work, because it produces eg [1, 1, 1, 2], but skips [2, 1, 1, 1], [1, 2, 1, 1] & [1, 1, 2, 1]. itertools.product does produce all of these combinations (and the docs even say "Equivalent to nested for-loops in a generator expression." for product()). Of course, when you want to throw away the lowest number, it becomes something like: >>> map(lambda x: sum(x)-min(x), itertools.product(range(1,7), repeat=4)) (list with 1296 elements) Just for future reference. _______________________________________________ Tutor maillist - [email protected] To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor
