# first step : build a dictionary mapping the objects # to all possible ids
alist = ['a.1','b.3','b.4','c.2','c.6','d.3'] elts = {} for item in alist: obj=item.split('.')[0] if elts.has_key(obj): elts[obj].append(item) else: elts[obj] = [item] # then build the Python code that will iterate # on all the possible values ks = elts.keys() ks.sort() p_code = '' for i,k in enumerate(ks): p_code += i*' ' + "for item%s in elts['%s']:\n" %(i,k) p_code += len(ks)*' '+'print ['+','.join([ "item%s" %i for i,k in enumerate(ks) ])+']' # print the code print p_code >for item0 in elts['a']: > for item1 in elts['b']: > for item2 in elts['c']: > for item3 in elts['d']: > print [item0,item1,item2,item3] # execute this code exec p_code >['a.1', 'b.3', 'c.2', 'd.3'] >['a.1', 'b.3', 'c.6', 'd.3'] >['a.1', 'b.4', 'c.2', 'd.3'] >['a.1', 'b.4', 'c.6', 'd.3'] It works, but there are probably more elegant ways to do it Just a question : in your message you say that 'a.1' and 'b.1' can not exist together, but in the example there are lists with both 'b.3' and 'd.3' : should such lists be filtered ? Regards, Pierre -- http://mail.python.org/mailman/listinfo/python-list