Pablo Lucena wrote: > Say I have a group of 4 lists as follows: > > l1 = ['a1', 'a2', 'a3', 'a4'] > l2 = ['b1', 'b2', 'b3', 'b4'] > l3 = ['c1', 'c2', 'c3', 'c4'] > l4 = ['d1', 'd2', 'd3', 'd4'] > > I would like to cycle through these lists "diagonally" in groups of > len(list) (in this example, each list has 4 items).
> Prior to this I was mucking around with index counting while looping, and > popping lists out of a deque, popping an item out of the list, and > appending the list back into the deque during each iteration. > > Is there a better/cleaner way to do this? I was hoping for some cool > itertools logic =) I have a weak spot for the itertools myself, but I think in terms of clarity it is hard to beat the conventional def diagonals(a): N = len(a) for i in range(N): for k in range(N): yield a[k][(k+i)%N] print(list(diagonals([l1, l2, l3, l4]))) Of course that's as uncool as it can get ;) -- https://mail.python.org/mailman/listinfo/python-list