X-Received: by 10.224.200.202 with SMTP id ex10mr9023030qab.8.1369416827481; Fri, 24 May 2013 10:33:47 -0700 (PDT) X-Received: by 10.50.40.99 with SMTP id w3mr71230igk.12.1369416827425; Fri, 24 May 2013 10:33:47 -0700 (PDT) Path: csiph.com!newsfeed.hal-mli.net!feeder3.hal-mli.net!newsfeed.hal-mli.net!feeder1.hal-mli.net!border3.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!nntp.giganews.com!ch1no979903qab.0!news-out.google.com!y6ni51317qax.0!nntp.google.com!ch1no979900qab.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail Newsgroups: comp.lang.python Date: Fri, 24 May 2013 10:33:47 -0700 (PDT) In-Reply-To: <519f4661$0$6599$c3e8da3$5496439d@news.astraweb.com> Complaints-To: groups-abuse@google.com Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=75.50.85.153; posting-account=aVGMWgkAAAB6mGKt34gyuFhFeGnfZNcf NNTP-Posting-Host: 75.50.85.153 References: <519f4661$0$6599$c3e8da3$5496439d@news.astraweb.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: Subject: Re: Simple algorithm question - how to reorder a sequence economically From: John Ladasky Injection-Date: Fri, 24 May 2013 17:33:47 +0000 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Lines: 22 Xref: csiph.com comp.lang.python:45905 On Friday, May 24, 2013 3:52:18 AM UTC-7, Steven D'Aprano wrote: > On Fri, 24 May 2013 01:14:45 -0700, Peter Brooks wrote: >=20 > > That is, for a sequence 1,2,3,4 to produce an arbitrary ordering (eg > > 2,1,4,3) that is different each time. >=20 > You can't *guarantee* that it will be different each time.=20 Well, within limits, you can guarantee a LONG TIME between repeats. And th= at may be good enough for Peter's purpose.=20 When the number of elements in your sequence is short enough (the right val= ue of "short enough" is at least partially a matter of opinion, and the amo= unt of RAM available, but I would guess n < 10 myself), use itertools.permu= tations to generate all the possibilities at once -- call this list p. Sto= re p in memory. Then shuffle p, and use its elements one at a time. If yo= u get to the end of p and need to keep working, it's up to you whether to s= huffle p a second time. If you don't reshuffle p, it guarantees the maximu= m interval between reusing the same permutation. Use random.shuffle on your sequence directly, when your sequence has a larg= er number of elements. This doesn't guarantee that two successive permutat= ions will not be identical, but the probability is of course very low.