Quoting János Juhász <[EMAIL PROTECTED]>: > > Dear Guys, > > I have a 2D array: > >>>[['1', '2 ', '3 '], ['longer ', 'longer ', 'sort']] > > > How can I get what is the max(len(item)) for the columns ? > I would like to get a list with the max_col_width values. > > I hope that, it can wrote with some nice list comprehension, but I can't > do that :(
There is a magic trick: You can use zip(* ) to transpose a two-dimensional array. eg: >>> arr = [[1,2,3], [4,5,6]] >>> zip(*arr) [(1, 4), (2, 5), (3, 6)] >>> zip(*zip(*arr)) [(1, 2, 3), (4, 5, 6)] (if this is not obvious to you, I recommend spending the time to figure out how this works) You can use this to easily get at the columns of your array. And once you have the columns, you can use a list comprehension to get the lengths of the elements and find the max. eg: >>> arr = [['a'*random.randint(1, 10) for i in range(5)] for j in range(10)] >>> pprint.pprint(arr) [['aaaaaa', 'a', 'aaaaaaaaaa', 'aaaa', 'aaaaaaaa'], ['aaaaaaa', 'aaaaaa', 'aaaaaaaaaa', 'aaa', 'aaa'], ['aa', 'aaaaaaa', 'aaaaaaaa', 'aaaaaa', 'aaaaaaa'], ['aaaaaaaa', 'aaaaaa', 'aaaaaaaaaa', 'aa', 'aa'], ['aaaaaaaaaa', 'aaaaa', 'aaaaaa', 'a', 'aaaa'], ['aaaaaaa', 'aaaaaaaaa', 'aaaaaa', 'aaaaa', 'aaaaaaaaaa'], ['aaaa', 'aaaaaaaaa', 'aaaaa', 'aaaa', 'aaaaaaaaaa'], ['aaaaa', 'aaa', 'aaaaaaaaa', 'aa', 'aaaaaaa'], ['aaaaaaaa', 'aaaaaa', 'aaaaaa', 'a', 'aaaaa'], ['aaaaaaaaa', 'aaaaaa', 'aaaaaa', 'aaa', 'aaaaaa']] >>> [max([len(s) for s in l]) for l in zip(*arr)] [10, 9, 10, 6, 10] HTH! -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor