如何使用两个列表作为循环python

时间:2014-12-06 07:08:24

标签: python list round-robin

我有两个列表,比如

num = [1,2,3,4]
names = ['shiva','naga','sharath','krishna','pavan','adi','mulagala']

我想并行打印两个列表,如果一个列表(num)结束,我想重复第一个列表(num)直到第二个(名称)列表结束。

现在我希望输出为

1 for shiva
2 for naga
3 for sarath
4 for krishna
1 for pavan
2 for adi
3 for mulagala

3 个答案:

答案 0 :(得分:6)

使用itertools.cyclezip

>>> num = [1,2,3,4]
>>> names = ['shiva','naga','sharath','krishna','pavan','adi','mulagala']
>>> import itertools
>>> for i, name in zip(itertools.cycle(num), names):
...     print('{} for {}'.format(i, name))
...
1 for shiva
2 for naga
3 for sharath
4 for krishna
1 for pavan
2 for adi
3 for mulagala

答案 1 :(得分:1)

您需要使用itertools.cycleitertools.izip的组合。例如:

>>> num = [1,2,3,4]
>>> names = ['shiva','naga','sharath','krishna','pavan','adi','mulagala']
>>> import itertools
>>> list(itertools.izip(itertools.cycle(num), names))
[(1, 'shiva'), (2, 'naga'), (3, 'sharath'), (4, 'krishna'), (1, 'pavan'), (2, 'adi'), (3, 'mulagala')]

答案 2 :(得分:0)

列表(roundrobin(' ABC',' D',' EF'))

输出: [' A',' D',' E',' B',& #39; F',' C']

from itertools import chain, izip_longest
def roundrobin(*iterables):
    sentinel = object()
    return (x for x in chain(*izip_longest(fillvalue=sentinel, *iterables)) if x is not sentinel)