Permutation of lists, combining and not combining list position

72 views Asked by At

I found a good script for the permutation of lists, combining and not combining list position on a tutorial and modified.

Here is the script:

`your text`
list1 = [1]
list2 = [6, 7, 8]
list3 = [9, 10, 11]
list4 = [12]

print("The original lists are : " + str(list1) +
      " " + str(list2) +
      " " + str(list3) +
      " " + str(list4))

res = [[i, j, k, l] for i in list1
                for j in list2
                for k in list3
                for l in list4]

print("All possible permutations are:")
for perm in res:
    print(*perm)

Resulting in this:

1 6 9 12
1 6 10 12
1 6 11 12
1 7 9 12
1 7 10 12
1 7 11 12
1 8 9 12
1 8 10 12
1 8 11 12

My problem is I would also like to have the result permutated result of some list, like list 3 and list 4, adding this result to the previous one:

1 9 6 12
1 10 6 12
1 11 6 12
1 9 7 12

Etc...

Is this possible? I cant find a tutorial/solution to add this to the script.

I'm quite new on python programming. Thanks in advance.

1

There are 1 answers

5
Python_Dude On BEST ANSWER

I'm not sure what result you want to achieve. But as I understand your question, you want to create the list res from the lists list1, list2, list3 & list4, which should contain the following values:

1  6  9 12
1  6 10 12
1  6 11 12
1  7  9 12
1  7 10 12
1  7 11 12
1  8  9 12
1  8 10 12
1  8 11 12
1  9  6 12
1 10  6 12
1 11  6 12
1  9  7 12
1 10  7 12
1 11  7 12
1  9  8 12
1 10  8 12
1 11  8 12

If that's your goal, you can easily achieve it by extending your code as follows:

list1 = [1]
list2 = [6, 7, 8]
list3 = [9, 10, 11]
list4 = [12]

print("The original lists are : " + str(list1) +
      " " + str(list2) +
      " " + str(list3) +
      " " + str(list4))

res = [[i, j, k, l] for i in list1
                for j in list2
                for k in list3
                for l in list4]

res_2 = [[i, k, j, l] for i in list1
                for j in list2
                for k in list3
                for l in list4]

for perm in res_2:
    res.append(perm)

print("All possible permutations are:")
for perm in res:
    print(*perm)

Update: To delete all lines that contain duplicates, you can extend the code as follows:

list1 = [1]
list2 = [6, 7, 8, 9]
list3 = [9, 10, 11]
list4 = [12]

print("\nThe original lists are : " + str(list1) +
      " " + str(list2) +
      " " + str(list3) +
      " " + str(list4))

res = [[i, j, k, l] for i in list1
                    for j in list2
                    for k in list3
                    for l in list4]

res_2 = [[i, k, j, l]   for i in list1
                        for j in list2
                        for k in list3
                        for l in list4]

for perm in res_2:
    res.append(perm)

print("\nAll possible permutations with duplicates in lines are:")
for perm in res:
    print(*perm)

delete_index = []
for i, line in enumerate(res):
    for j, element in enumerate(line):
        for k in range(j, len(res[0])):
            if j != k:
                if element == line[k]:
                    delete_index.append(i)

for i in sorted(delete_index, reverse=True):
    del res[i]        

print("All possible permutations are:")
for perm in res:
    print(*perm)

By executing the code you will get the following output:

The original lists are : [1] [6, 7, 8, 9] [9, 10, 11] [12]

All possible permutations with duplicates in lines are:
1 6 9 12
1 6 10 12
1 6 11 12
1 7 9 12
1 7 10 12
1 7 11 12
1 8 9 12
1 8 10 12
1 8 11 12
1 9 9 12
1 9 10 12
1 9 11 12
1 9 6 12
1 10 6 12
1 11 6 12
1 9 7 12
1 10 7 12
1 11 7 12
1 9 8 12
1 10 8 12
1 11 8 12
1 9 9 12
1 10 9 12
1 11 9 12

All possible permutations are:
1 6 9 12
1 6 10 12
1 6 11 12
1 7 9 12
1 7 10 12
1 7 11 12
1 8 9 12
1 8 10 12
1 8 11 12
1 9 10 12
1 9 11 12
1 9 6 12
1 10 6 12
1 11 6 12
1 9 7 12
1 10 7 12
1 11 7 12
1 9 8 12
1 10 8 12
1 11 8 12
1 10 9 12
1 11 9 12

As you can see, the two lines that contained the elements 1 9 9 12 were deleted from the list.