In article <[EMAIL PROTECTED]>, Chris Wright <[EMAIL PROTECTED]> wrote:
> Hi, > > 1) I want to iterate over a list "N at a time" You could do it with slicing and zip: >>> l = [1, 2, 3, 4, 5, 6, 7, 8] >>> zip (l[::2], l[1::2]) [(1, 2), (3, 4), (5, 6), (7, 8)] To my eyes, that's a bit cryptic, but it works and it's certainly compact. I don't use either zip() or extended slicing a lot; perhaps if I used them more often, the above would be more obvious to me if I read it in somebody else's code. The interesting thing would be generalizing this to the "N at a time" case. I think this works: def nzip (list0, n): args = [] for i in range(n): slice = list0[i::n] args.append (slice) return zip (*args) l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] print nzip (l, 3) Roy-Smiths-Computer:play$ ./nzip.py [(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12)] but I haven't given any thought to what happens if the length of the list isn't a multiple of n (exercise for the reader). It's also annoying that the above generates a bunch of temporary lists. It would be cool if there was a way to have the intermediates be generator expressions, but I'm not that good with that stuff, so I'll leave that as an exercise for other readers :-) -- http://mail.python.org/mailman/listinfo/python-list