Python:将循环与列表相关联

时间:2013-11-29 16:34:59

标签: python list loops for-loop

我找不到任何解决方法。在我的实际例子中,这将用于将颜色掩码与对象相关联。

我认为最好的解释方法是举个例子:

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

我需要的结果:

#0 pencil    # 0 red
#1 pen       # 1 green
#2 keyboard  # 2 blue
#3 table     # 0 red
#4 phone     # 1 green

因此,总会有3种颜色与对象关联,如何在python中的for循环中获得此结果?每次n(迭代器)大于颜色列表的长度时,如何告诉它返回并打印第一个索引等等?

2 个答案:

答案 0 :(得分:8)

使用%

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

zip()itertools.cycle()

from itertools import cycle

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

演示:

>>> 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

答案 1 :(得分:1)

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

>>> for i, obj, j, color in izip(count(), objects, cycle(range(len(colors))), cycle(colors)):
...     print i, obj, j, color
... 
0 pencil 0 red
1 pen 1 green
2 keyboard 2 blue
3 table 0 red
4 phone 1 green