Python: Associate for loop with a list

for-loop, list, loops, python

Solution

Use `%`:

for n, obj in enumerate(objects):
    print n, obj, colors[n % len(colors)]

or `zip()` and `itertools.cycle()`:

from itertools import cycle

for n, (obj, color) in enumerate(zip(objects, cycle(colors))):
    print n, obj, color

Demo:

>>> objects = ['pencil','pen','keyboard','table','phone']
>>> colors  = ['red','green','blue']
>>> for n, obj in enumerate(objects):
...     print n, obj, colors[n % len(colors)]
... 
0 pencil red
1 pen green
2 keyboard blue
3 table red
4 phone green
>>> from itertools import cycle
>>> for n, (obj, color) in enumerate(zip(objects, cycle(colors))):
...     print n, obj, color
... 
0 pencil red
1 pen green
2 keyboard blue
3 table red
4 phone green

Problem

I couldn't find any workaround for this. In my real example this will serve to associate color masks with objects. I think the best way to explain is give an example: ``` objects = ['pencil','pen','keyboard','table','phone'] colors = ['red','green','blue'] for n, i in enumerate(objects): print n,i #0 pencil # print the index of colors ``` The result I need: ``` #0 pencil # 0 red #1 pen # 1 green #2 keyboard # 2 blue #3 table # 0 red #4 phone # 1 green ``` So, there will be always 3 colors to associate with the objects, How can I get this result within a `for` loop in python? Every time the n (iterator) is bigger than the length of the colors list, how can I tell it to go back and print the first index and so on?

Original source