Something like that?
>>> import itertools >>> >>> a = 'ABCDE' >>> b = 'xy' >>> >>> list(itertools.izip_longest(a, b, fillvalue='-')) [('A', 'x'), ('B', 'y'), ('C', '-'), ('D', '-'), ('E', '-')] >>> list(itertools.izip(a, itertools.cycle(b))) [('A', 'x'), ('B', 'y'), ('C', 'x'), ('D', 'y'), ('E', 'x')]
etc .. And there is a variant of an arbitrary number of iterations (assuming that you do not want the first argument to change cyclically and that you are really not interested in itertools.product):
>>> a = 'ABCDE' >>> bs = ['xy', (1,2,3), ['apple']] >>> it = itertools.izip(*([a] + [itertools.cycle(b) for b in bs])) >>> list(it) [('A', 'x', 1, 'apple'), ('B', 'y', 2, 'apple'), ('C', 'x', 3, 'apple'), ('D', 'y', 1, 'apple'), ('E', 'x', 2, 'apple')]