31
$\begingroup$

Is there a straightforward way to go from an ordered list like:

ord = {a, b, c, d, e, f, g, h}

to a disordered list like:

randompos = {c, h, d, g, a, b, f, e}

I can certainly use something like:

DeleteDuplicates @ RandomChoice[ord, 50]

but this is not really robust.

Is there an easier way?

$\endgroup$
9
  • 5
    $\begingroup$ Use RandomSample. $\endgroup$
    – Spawn1701D
    Jun 25, 2013 at 3:44
  • 1
    $\begingroup$ @Spawn1701D RandomSample won't be able to create the letter i out of thin air. The OP needs a god $\endgroup$ Jun 25, 2013 at 3:46
  • 1
    $\begingroup$ @Spawn1701D That is a simplistic way :) $\endgroup$ Jun 25, 2013 at 3:48
  • 1
    $\begingroup$ @belisarius typo fixed. i have no need for the divine. $\endgroup$
    – geordie
    Jun 25, 2013 at 4:09
  • 1
    $\begingroup$ RandomSample[#,Length[#]]&@ord $\endgroup$ Jun 25, 2013 at 4:13

1 Answer 1

31
$\begingroup$

Method1 RandomSample


as @Spawn1701D and @Oleksandr R.said in comment,

RandomSample[ord] is sufficient.

ord = {a, b, c, d, e, f, g, h};

RandomSample[ord]

(*
    {c,e,g,b,h,f,a,d}
*)

To get one sublist

RandomSample[#, Length[#] - 4] & @ ord

(*
    {g,h,e,f}
*)

Method2 RandomPermutation


SeedRandom[1234]; Permute[ord, RandomPermutation[8]]

(*
    {b,f,e,h,d,g,c,a}
*)

One aside: sometimes when people's comments are apparently feasible to the question, they might not likely to answer the post, others may wish the first people who leave the good comment to answer the question, and OP is also encouraged to answer its own question.

So I answer the little post with one additional method.

$\endgroup$
1
  • 2
    $\begingroup$ @HyperGoups -- no need to apologize. If the commenter wanted to answer, he would have spawned one by now. $\endgroup$
    – bill s
    Jun 26, 2013 at 5:21

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.