Search code examples
pythonpython-3.xpermutation

Wrong number of permutations nPr(5,3) on a list


The goal of this program is to make as many permutations of x in size 3 (nPr(5,3), hence the iterations of (i, j, k)).

My effort on trying to achieve the permutations nPr(5,3), where 5 is the length of the list x and 3 is the length of the tuple (i,j,k):

# x will never have any repeats
x = [1, 2, 3, 4, 5]
# nPr(5,3) = 60
y = []


for i in x:
    for j in x:
        for k in x:
            y.append((i, j, k))

print(f"Len of y = {len(y)}")

I'm expecting len(y) to be 60, as nPr(5,3) = 60. But i get the output Len of y = 125. Also, making y = set() does not fix this issue

  • What have I done wrong?
  • How do I fix this code to work (without using itertools)

Answer TL;DR: I was allowing duplicates (1,1,1)


Solution

  • You are allowing repeats (for example, [1,1,1] and [2,2,2]). The value of 60 is for permutations without repeats. You do that by checking that you aren't repeating a value.

    NOTE that this code only works if there are no repeats in x. If there are duplicates, then you would have to use indexes instead (that is, for i in range(len(x)):).

    x = [1,2,3,4,5]
    y = []
    for i in x:
        for j in x:
            if i == j:
                continue
            for k in x:
                if i!=k and j!= k: 
                    y.append((i,j,k))
    print(y)