Iyer wrote: > I have 2 lists: > > List 1 has lists in it, such as > > list1 = [[1,'A'],[2,'B'],[3,'C'],[4,'D']] > > There is another list2 such as > > list2 = [[1,'AA'],[3,'CC'], [4,'DD']] > > For eg, > > I wish to iterate over both the lists and produce the output > > a = [[1,'A'],[1,'AA']] > b = [[2,'B']] > c = [[3,'C'],[3,'CC']] > d = [[4,'D'],[4,'DD']] > > Or [a,b,c,d] where a,b,c,d are defined above > > What would be the best and quickest way to carry this out ?
If you want the result ordered by the first element, you can combine the two lists, sort the combined list, and use itertools.groupby() to collect the groups: In [1]: list1 = [[1,'A'],[2,'B'],[3,'C'],[4,'D']] In [2]: list2 = [[1,'AA'],[3,'CC'], [4,'DD']] In [3]: import itertools, operator In [4]: l=list1+list2 In [5]: l.sort() In [7]: [ list(g) for k, g in itertools.groupby(l, key=operator.itemgetter(0))] Out[7]: [[[1, 'A'], [1, 'AA']], [[2, 'B']], [[3, 'C'], [3, 'CC']], [[4, 'D'], [4, 'DD']]] If you don't care about order, you can use a dict to collect like items: In [8]: d={} In [9]: for i in l: ...: d.setdefault(i[0], []).append(i) In [11]: d.values() Out[11]: [[[1, 'A'], [1, 'AA']], [[2, 'B']], [[3, 'C'], [3, 'CC']], [[4, 'D'], [4, 'DD']]] These are in order but in general they will not be. If you want to preserve the original order then I think you will have to do it "by hand" as John suggests. Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor