On 26/02/2016 09:59, Peter Otten wrote:
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 ;)


It might be uncool, but at least I can read it, unlike the earlier Jussi Piitulainen answer that made my head spin :)

--
My fellow Pythonistas, ask not what our language can do for you, ask
what you can do for our language.

Mark Lawrence

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to