Although you can use what calls __add__ sequence, this is not at all what you need (for beginners, you create as many new lists as there are lists in your input, which ends in quadratic complexity).
The standard tool is itertools.chain :
def concatenate(*lists): return itertools.chain(*lists)
or
def concatenate(*lists): return itertools.chain.from_iterable(lists)
This will return a generator that issues each element of the lists in sequence. If you need it, use list : list(itertools.chain.from_iterable(lists))
If you insist on doing this manually, use extend :
def concatenate(*lists): newlist = [] for l in lists: newlist.extend(l) return newlist
Strike>
Actually, do not use extend like this - it is still inefficient because it must continue to expand the original list. The "correct" way (this is still not the case):
def concatenate(*lists): lengths = map(len,lists) newlen = sum(lengths) newlist = [None]*newlen start = 0 end = 0 for l,n in zip(lists,lengths): end+=n newlist[start:end] = list start+=n return newlist
http://ideone.com/Mi3UyL
You will notice that this still ends up with as many copy operations as there are full slots in the list. So this is no better than using list(chain.from_iterable(lists)) and probably worse because list can use C level optimization.
Finally, here is the version using extend (suboptimal) on one line, using the abbreviation:
concatenate = lambda *lists: reduce((lambda a,b: a.extend(b) or a),lists,[])