On 26/04/07, Terry Carroll <[EMAIL PROTECTED]> wrote: > I have a list (of arbitrary length) of lists, each sublist having a fixed > number N of items, all integers. > > I would like to produce a list of N items, each item of which is an > integer which is the average of the elements in the same position of each > of the sublists of the original list.
I don't think you're going to be able to do it with a single listcomp based on the original list. The reason I say this is because you need to iterate over your _entire_ list (of arbitary length) in order to compute _each_ element of the result list. If you want a one-line solution, your best bet is to transform your start list: instead of [[10, 20, 30], [50, 20, 90], [30, 20, 30]], you'd like to have [[10,50,30], [20,20,20], [30,90,30]]. Then, it would be easy. Well, there's actually a simple way to do this transformation. You can use the zip function: >>> zip([10, 20, 30], [50, 20, 90], [30, 20, 30]) [(10, 50, 30), (20, 20, 20), (30, 90, 30)] And we can go a step further: >>> orig = [[10, 20, 30], [50, 20, 90], [30, 20, 30]] >>> zip(*orig) [(10, 50, 30), (20, 20, 20), (30, 90, 30)] So, here is your one-line solution: >>> [sum(x)/len(x) for x in zip(*orig)] [30, 20, 50] HTH! :-) -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor