Note that there are some explanatory texts on larger screens.

plurals
  1. POGenerate all permutations of a list in lexicagraphical order
    primarykey
    data
    text
    <p>I am very much a beginner. I am trying to write a program that, given the number of elements (1-9) in the list as a parameter, will then output all permutations of the list in lexicographical order. In the program it is adding on each permutation as a list into a larger list that contains all the permutations in order. Although the program is not working as expected in general, one main problem I'm having is with this while loop In line 10, I want the list to stop compiling once the final permutation has been added to the list. For example, if my input parameter is n = 4, the last permutation/element should be [4,3,2,1]. However, when I run this program, that element is in the list three times at the end. I don't know how this is so when it should terminate that while loop once it has been added.</p> <pre><code>def ourPermutations(n): x=list(range(1,n+1)) permList = [] permList+=[x] xcopy = x[:] finalPerm = xcopy[::-1] while x != finalPerm: istar = n-2 while x[istar] &gt; x[istar+1]: istar -= 1 jstar = n-1 while x[jstar] &lt; x[istar]: jstar -= 1 x[istar],x[jstar] = x[jstar],x[istar] if istar+1 == n-1: x = x[:] else: a = x[istar+1:] a = a[::-1] x = x[:istar+1] + a permList += [x] return permList </code></pre> <p>That is my main question; however, this program is still missing elements when I run it. It isn't quite working, so if you see a spot where something is obviously wrong, feel free to tell me that particular line is what is causing my problems. If it helps, this is based on this identical (and correct) version written in Mathematica 8:</p> <pre><code>ourpermutations[n_] := ( ourlist = {x=Range[1,n]}; While[ x != Reverse[Range[1,n]], istar = n-1; While[x[[istar]] &gt; x[[istar+1, istar--]; jstar = n; While[x[[jstar]] &lt; x[[istar]], jstar--]; x[[{istar, jstar}]] = x[[{jstar, istar}]]; AppendTo[ourlist, x = Join[Take[x,istar], Reverse[Drop[x,istar]]]] ]; ourlist ) </code></pre> <p>So this is what my Python code should be doing; I just can't get it to do so just yet. Thanks for any of your time and effort.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload