all pairs of items in a list without indexing?

Jim Sizelove sizelji at
Tue Sep 28 23:47:32 CEST 2004

Steven Bethard wrote:
> So I need to do something like:
> for i in range(len(l)):
>     for j in range(i+1, len(l)):
>         # do something with (l[i], l[j])
> where I get all pairs of items in a list (where I'm thinking of pairs
> as sets, not tuples, so order doesn't matter).  There isn't really
> anything wrong with the solution here, but since Python's for-each
> construction is so nice, I usually try to avoid range(len(..)) type
> calls and list indexing when I can...  Is there any way to do this
> without indexing

Are you trying to pair each item in a list with every other
item exactly once?  Maybe this code does what you want:

while len(L)>0:
     item1 = L.pop()
     for item2 in L:
         print (item1, item2)

pop() removes one item from the list.  The inner for loop matches that 
item with each of the remaining items.  At the end of the outer loop the 
list L is empty; you may want to run this loop over a copy of the list 
if you want to do other things with the list later.



More information about the Python-list mailing list