all pairs of items in a list without indexing?

Steven Bethard steven.bethard at gmail.com
Tue Sep 28 22:34:00 CEST 2004


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, e.g.:

for item1 in ...:
    for item2 in ...:
        # do something with (item1, item2)

I could do something like:

for i, item1 in enumerate(l):
    for j in range(i+1, len(l)):
        (item1, l[j])

but that only gets me halfway there...  I also thought of something like:

for i, item1 in enumerate(l):
    for item2 in l[i+1:]:
        (item1, item2)

but that seems like a lot of wasteful list slicing...

Thanks in advance,

Steve
-- 
You can wordify anything if you just verb it.
        - Bucky Katt, Get Fuzzy



More information about the Python-list mailing list