【问题标题】:Python: Associate for loop with a listPython:将 for 循环与列表相关联
【发布时间】:2013-12-15 21:44:22
【问题描述】:

我找不到任何解决方法。在我的真实示例中,这将用于将颜色蒙版与对象相关联。

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

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 (迭代器)大于颜色列表的长度时,我如何告诉它返回并打印第一个索引等等?

【问题讨论】:

    标签: python list loops for-loop


    【解决方案1】:

    使用%:

    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
    

    【讨论】:

      【解决方案2】:
      >>> 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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-13
        • 2015-08-28
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        相关资源
        最近更新 更多