anon
anon

Reputation:

Permutations in a list

I have a list containing n integers. The ith element of the list a, a[i], can be swapped into any integer x such that 0 ≤ x ≤ a[i]. For example if a[i] is 3, it can take values 0, 1, 2, 3.

The task is to find all permutations of such list. For example, if the list is

my_list = [2,1,4]

then the possible permutations are:

[0,0,0], [0,0,1], ... [0,0,4],
[0,1,0], [0,1,1], ... [0,1,4],
[1,0,0], [1,0,1], ... [1,0,4],
[1,1,0], [1,1,1], ... [1,1,4],
[2,0,0], [2,0,1], ... [2,0,4],
[2,1,0], [2,1,1], ... [2,1,4]

How to find all such permutations?

Upvotes: 4

Views: 299

Answers (3)

Parijat Bhatt
Parijat Bhatt

Reputation: 674

Try this. Let me know if I misunderstood your question

def permute(l,cnt,n):
    if cnt==n:
        print(l)
        return 
    limit = l[cnt]
    for i in range(limit+1):
        l[cnt]=i
        permute(l[:n],cnt+1,n)
    
l =[2,1,4]
permute(l,0,3)

Upvotes: 0

Faraaz Kurawle
Faraaz Kurawle

Reputation: 1150

Here's a solution:

my_list=[2,1,4]    
def premutation_list(p_list):
    the_number=int("".join(map(str,p_list)))
    total_len=len(str(the_number))
    a=[i for i in range(the_number)]
    r_list=[]
    for i in a:
        if len(str(i))<total_len:
            add_rate=total_len - len(str(i))
            b="0,"*add_rate
            b=b.split(",")
            b=b[0:len(b)-1]
            b.append(str(i))
            r_list.append([int(y) for x in b for y in x ])
        else:
            r_list.append([int(x) for x in str(i)])

    return r_list
print(premutation_list(my_list))

Explanation:

  • The basic idea is just getting all the numbers till the given number. For example till 4 there are 0,1,2,3, number.
  • I have achieved this first by converting the list into a integer.
  • Then getting all the numbers till the_number.

Upvotes: 0

FObersteiner
FObersteiner

Reputation: 25564

you could use a comibation of range to get all the 'valid' values for each element of the list and itertools.product:

import itertools

my_list = [2,1,4]

# get a list of lists with all the possible values
plist = [list(range(y+1)) for y in my_list]

#
permutations = sorted(list(itertools.product(*plist)))

more on itertools product see e.g. here on SO or the docs.

Upvotes: 3

Related Questions