On Feb 17, 7:51 am, Arnaud Delobelle <[EMAIL PROTECTED]> wrote: > BTW, I keep using the idiom itertools.chain(*iterable). I guess that > during function calls *iterable gets expanded to a tuple. Wouldn't it > be nice to have an equivalent one-argument function that takes an > iterable of iterables and return the 'flattened' iterable?
Indeed; I don't have any exact numbers but I roughly use this idiom as often or more as the case where chain() takes a known fixed number of arguments. The equivalent function you describe is trivial: def chain2(iter_of_iters): for iterable in iter_of_iters: for i in iterable: yield i but I usually don't bother, although if it was available in itertools I'd use it instead. Apart from introducing a new function for something quite similar, another idea would be to modify chain(*iterables) semantics if it is passed a single argument. Currently chain() is useful for 2 or more arguments; chain(x) is equivalent to iter(x), there's no reason to use it ever. On the downside, this might break backwards compatibility for cases like chain(*some_iterable) where some_iterable has length of 1 but I'd guess this is quite rare. George -- http://mail.python.org/mailman/listinfo/python-list