ad_ad
ad_ad

Reputation: 385

Generating pairs from python list

I'm trying generate a bunch of pairs from a list in python --- I figured out a way of doing it using for loops:

keys = range(10)
keypairs = list()
for i in range(len(keys)):
        for j in range(i+1, len(keys)):
            keypairs = keypairs + [(keys[i], keys[j])]

Is there a more "python style" way of doing this? My method doesn't seem very elegant ...

Upvotes: 4

Views: 472

Answers (3)

Padraic Cunningham
Padraic Cunningham

Reputation: 180401

You want two range loops, one from 0 to n and the inner from each i of the first range + 1 to n using a list comp:

n = 10
pairs = [(i, j) for i in range(n) for j in range(i+1, n)]
from pprint import pprint as pp
pp(pairs,compact=True)


[(0, 1), (0, 2), (0, 3), (0, 4), (0, 5), (0, 6), (0, 7), (0, 8), (0, 9), (1, 2),
 (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 3), (2, 4), (2, 5),
 (2, 6), (2, 7), (2, 8), (2, 9), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9),
 (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 6), (5, 7), (5, 8), (5, 9), (6, 7),
 (6, 8), (6, 9), (7, 8), (7, 9), (8, 9)]

Which exactly matches your output.

Upvotes: 2

running.t
running.t

Reputation: 5709

I would use itertools for that. Check combinations_with_replacement and combinations methods.

And here is the code sample:

import itertools
list(itertools.combinations(keys, 2))

EDITED: Yes, I noticed that it should be combinations, not combinations_with_replacements.

Upvotes: 1

ergonaut
ergonaut

Reputation: 7057

You want to check list comprehension:

sorted([(i, j) for j in range(10) for i in range(10) if j > i])

Upvotes: 1

Related Questions