Please bear with me while I struggle to explain this; my math is rusty and I just started computer programming, sorry!
Say I have a list of 3 items. I want to find all possible arrangements of the items in this list where each arrangement consists of 3 items.
Next, still using my original list, I want to find all the possible arrangements of the items of the list, except I only want the arrangements to consist of two items.
Finally, I want to do the same thing again, except arrangements only consist of one item.
So I expect 3! + 3!/1! + 3!/2!, or 15 total arrangements. Just to be really explicit about what I want, if my list were [1, 2, 3], then the code should produce:
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 2
3, 1, 2
3, 2, 1
1, 2
1, 3
2, 1
2, 3
3, 1
3, 2
1
2
3
The code I have written below can do what I have written above, but only for lists of length 3. I could modify the code to handle lists of greater length by adding extra 'for' loops and 'elif' statements, but I feel like there has to be a way to generalize the pattern. What should I do so that I can get permutations of the kind described above for lists of any length?
I think my exhaustive enumeration method might be making this more complicated than it needs to be... will try to think about other methods and update if solution found.
def helperFunction(itemsList):
fullPermutationsOutputList = []
def fullPermutations(itemsList, iterations):
for item1 in itemsList:
if iterations == 2:
if len([item1]) == len(set([item1])):
fullPermutationsOutputList.append((item1,))
else:
for item2 in itemsList:
if iterations == 1:
if len([item1, item2]) == len(set([item1, item2])):
fullPermutationsOutputList.append((item1, item2))
else:
for item3 in itemsList:
if iterations == 0:
if len([item1, item2, item3]) == len(set([item1, item2, item3])):
fullPermutationsOutputList.append((item1, item2, item3))
if iterations == 0:
fullPermutations(itemsList, iterations + 1)
elif iterations == 1:
fullPermutations(itemsList, iterations + 1)
fullPermutations(itemsList, 0)
return fullPermutationsOutputList