Looking for an elegant way for looping simultaneously over two list with different lengths

  • A+
Category:Languages

I'm looking for the most elegant/short/pythonic way to iterate through two uneven lists simultaneously. If the shorter list ends at some point, it should start to iterate from the beginning.

So far, I managed to do it with the while, which I consider as ugly, and too long (from various reasons I need as short code as possible).

list1 = ["a", "b", "c"] list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]  i1 = 0 i2 = 0 while True:     if i2 == len(list2):         break     if i1 == len(list1):         i1 = 0     print(list1[i1], list2[i2])     i1 += 1     i2 += 1 

The expected result should look like this. I'm achieving it with while loop (the code above). But I need to have as short code as possible:

a 1 b 2 c 3 a 4 b 5 c 6 a 7 b 8 c 9 a 10 

 


zip both lists, feeding the shortest one to itertools.cycle so it repeats indefinitely (until list2 ends):

import itertools  list1 = ["a","b","c"] list2 = [1,2,3,4,5,6,7,8,9,10]  for a,b in zip(itertools.cycle(list1),list2):     print(a,b) 

prints:

a 1 b 2 c 3 a 4 b 5 c 6 a 7 b 8 c 9 a 10 

(of course don't use itertools.zip_longest as cycle never ends, which would create an infinite loop)

Comment

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: