On Sep 4, 2:06 pm, Duncan Booth <[EMAIL PROTECTED]> wrote: > [EMAIL PROTECTED] wrote: > >> But watch out if the lists aren't all the same length: zip won't pad out > >> any sequences, so it maynotbe exactly what is wanted here: > > >> >>> x = ['1', '2', '3'] > >> >>> y = ['4', '5'] > >> >>> for row in zip(x,y): > > >> print ', '.join(row) > > >> 1, 4 > >> 2, 5 > > > Unfortunately the lists will be of different sizes > > In that case use: > > from itertools import repeat, chain, izip > def izip_longest(*args, **kwds): > fillvalue = kwds.get('fillvalue') > def sentinel(counter = ([fillvalue]*(len(args)-1)).pop): > yield counter() # yields the fillvalue, or raises IndexError > fillers = repeat(fillvalue) > iters = [chain(it, sentinel(), fillers) for it in args] > try: > for tup in izip(*iters): > yield tup > except IndexError: > pass > > x = ['1', '2', '3'] > y = ['4', '5'] > for row in izip_longest(x,y, fillvalue='*'): > print ', '.join(row) > > which gives: > > 1, 4 > 2, 5 > 3, * > > (izip_longest is in a future version of itertools, but for > now you have to define it yourself).
Thanks guys I have a list of lists such as a = ["1" , "2"] b = ["4", "5", "6"] c = ["7",8", "9"] Stored in another list: d = [a,b,c] I know this makes me sound very stupid but how would I specify in the parameter the inner lists without having to write them all out such as: for row in izip_longest(d[0], d[1], d[2], fillvalue='*'): print ', '.join(row) i.e. How could I do the following if I didn't know how many list of lists I had. Sorry this sounds stupid and easy. Thankyou very much in advance as well, you are all very helpful indeed. -- http://mail.python.org/mailman/listinfo/python-list