andrea.gavana wrote: > If I simplify the problem, suppose I have 2 lists like: > > a = range(10) > b = range(20,30) > > What I would like to have, is a "union" of the 2 list in a single tuple. In > other words (Python words...): > > c = (0, 20, 1, 21, 2, 22, 3, 23, 4, 24, 5, 25, .....
The 'yield' statement is very useful for this sort of thing as well as the itertools module. I thought the latter had something for this already but I don't see it. Here's an implementation >>> import itertools >>> def round_robin(*iterables): ... iterables = map(iter, iterables) ... for element in itertools.cycle(iterables): ... yield element.next() ... >>> tuple(round_robin(range(10), range(20, 30))) (0, 20, 1, 21, 2, 22, 3, 23, 4, 24, 5, 25, 6, 26, 7, 27, 8, 28, 9, 29) >>> Don't know about the speed though. Didn't have anything to compare it took. You mentioned you do a lot of string concatenation Double checking; do you know that in Python it's faster to append the new string elements to a list and only then do a single string concatenation of the list elements? That is, do terms = [] for x in data: s = process_the_element(x) terms.append(s) s = "".join(data) rather than # this is slow if there are many string concatenations s = "" for x in data: s = s + process_the_element(x) Andrew [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list