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