0

I want to create an iterator with cartesian products where no duplicates are present in the sense of sets.

import itertools
A = list(range(1,10))
iterator = itertools.product(A,repeat=2)
print(list(iterator))
>> [(1,1),(1,2),...,(2,1),...,(9,9)]

Above is wrong in the sense that set((1,2)) == set((2,1)). I could do

B = list()
for i in iterator:
    if all(set(i) != set(j) for j in B):
        B.append(i)

and get a list of the wanted output, but I would like to stay away from lists since I run into memory problems when scaling the repeat-option.

Can anyone help me out?

1 Answers1

0
A = list(range(1,10))
k = []
for i, v in enumerate(A):
    for _, v1 in enumerate(A[i:]):
        k.append((v, v1))
print(k)   

Output is

[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 6), (6, 7), (6, 8), (6, 9), (7, 7), (7, 8), (7, 9), (8, 8), (8, 9), (9, 9)]
ComplicatedPhenomenon
  • 4,055
  • 2
  • 18
  • 45