You can just flatten the list using itertools and collate the results usingdefaultdict:

import itertools

from collections import defaultdict

sequence = ((0,'a','b'),(1,'c','d'),(2,'e','f'),(3,'g','h'),( 1,'i','j'),(2,'k','l'),(4,'m','n'),(2,'o','p'),(4, 'q','r'),(5,'s','t'))

# flatten the list to (0,'a','b',1,'c','d'...

chain = itertools.chain.from_iterable(sequence)

# use defaultdict to set up the final list and deal with initial empty dictionary key

final_list = defaultdict(list)

for i in chain:

if isinstance(i, int):

number = i

else:

final_list[number].append(i)

print (final_list.items())

HTH,

Nick

On Sunday, September 26, 2010 2:05:13 PM UTC+10, Xah Lee wrote:

> here's a interesting toy list processing problem.

>

> I have a list of lists, where each sublist is labelled by

> a number. I need to collect together the contents of all sublists

> sharing

> the same label. So if I have the list

>

> ((0 a b) (1 c d) (2 e f) (3 g h) (1 i j) (2 k l) (4 m n) (2 o p) (4 q

> r) (5 s t))

>

> where the first element of each sublist is the label, I need to

> produce:

>

> output:

> ((a b) (c d i j) (e f k l o p) (g h) (m n q r) (s t))

>

> a Mathematica solution is here:

> http://xahlee.org/UnixResource_dir/w...tions_mma.html

>

> R5RS Scheme lisp solution:

> http://xahlee.org/UnixResource_dir/w...work_gmail.scm

> by Sourav Mukherjee

>

> also, a Common Lisp solution can be found here:

> http://groups.google.com/group/comp....ded8824bc750b?

>

> anyone care to give a solution in Python, Perl, javascript, or other

> lang? am guessing the scheme solution can be much improved... perhaps

> using some lib but that seems to show scheme is pretty weak if the lib

> is non-standard.

>

> Xah ∑ xahlee.org ☄