all pairs of items in a list without indexing?

Alex Martelli aleaxit at yahoo.com
Wed Sep 29 09:50:39 EDT 2004


Duncan Booth <duncan.booth at invalid.invalid> wrote:

> Michael Sparks wrote:
> 
> > This is what was asked for:
> > 
> > # Given a list l which we want all pairs:
> >>>> l=[1,2,3,4,5]
> >>>> [(l[x],l[y]) for y in xrange(len(l)) for x in xrange(y,len(l)) if
> >>>> x!=y] 
> > [(2, 1), (3, 1), (4, 1), (5, 1), (3, 2), (4, 2), (5, 2), (4, 3), (5,
> > 3), (5, 4)] 
> 
> The same thing can be written slightly more succinctly as:
> 
> >>> [(l[x],l[y]) for y in xrange(len(l)) for x in xrange(y+1,len(l))]
> [(2, 1), (3, 1), (4, 1), (5, 1), (3, 2), (4, 2), (5, 2), (4, 3), (5, 3),
> (5, 4)]

which in turn can be compacted yet a bit more, down to:

[ (s, f) for i, f in enumerate(l) for s in l[i+1:] ]


Alex



More information about the Python-list mailing list