On Jun 2, 3:38 am, Chris <[EMAIL PROTECTED]> wrote: > On Jun 2, 9:34 am, "[EMAIL PROTECTED]" > > <[EMAIL PROTECTED]> wrote: > > Hi, > > > i am building a little script and i want to output a series of columns > > more or less like this: > > > 1 5 6 > > 2 2 8 > > 2 9 5 > > > The matter is that i don't know in advance how many columns there will > > be. By the way, each column will be actually FLOATs, not INTs. How can > > i do this ? Any help welcome. Regards, > > > Victor > > import sys > float_list = [1.0, 5.0, 6.0, 2.0, 2.0, 8.0, 2.0, 9.0, 5.0] > num_columns = 3 > for i,item in enumerate(float_list): > sys.stdout.write('%.4f\t' % item) > if not (i+1) % num_columns: > sys.stdout.write('\n') > > Problem with this approach is it doesn't cater for instances where you > exceed the standard 80 characters for a terminal window.
That wouldn't be a problem if being re-directed to a file. A bigger problem would be if his list were actually [1.0,2.0,2.0,5.0,2.0,9.0,6.0,8.0,5.0] but he still wanted it printed 1 5 6 2 2 8 2 9 5 as if he always wants 3 rows, but doesn't know how many columns it will take. In which case, he could do something like this: import sys float_list = [1.0,2.0,2.0,5.0,2.0,9.0,6.0,8.0,5.0] num_rows = 3 num_cols = divmod(len(float_list),num_rows) for r in xrange(num_rows): for c in xrange(num_cols[0]): sys.stdout.write('%.4f\t' % float_list[c*num_rows + r]) if num_cols[1]>0 and r<num_cols[1]: sys.stdout.write('%.4f\t' % float_list[(c+1)*num_rows + r]) sys.stdout.write('\n') 1.0000 5.0000 6.0000 2.0000 2.0000 8.0000 2.0000 9.0000 5.0000 And then changing list size would merely add more columns, so [1.0,2.0,2.0,5.0,2.0,9.0,6.0,8.0,5.0,6.6666] would print as 1.0000 5.0000 6.0000 6.6666 2.0000 2.0000 8.0000 2.0000 9.0000 5.0000 -- http://mail.python.org/mailman/listinfo/python-list