<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Permutación on Karpoke - Just Another Blog</title><link>http://karpoke.ignaciocano.com/tags/permutaci%C3%B3n/</link><description>Recent content in Permutación on Karpoke - Just Another Blog</description><generator>Hugo -- 0.159.0</generator><language>es</language><lastBuildDate>Tue, 29 Mar 2011 20:00:00 +0100</lastBuildDate><atom:link href="http://karpoke.ignaciocano.com/tags/permutaci%C3%B3n/index.xml" rel="self" type="application/rss+xml"/><item><title>Desordenando listas en Python</title><link>http://karpoke.ignaciocano.com/2011/03/29/desordenando-listas-en-python/</link><pubDate>Tue, 29 Mar 2011 20:00:00 +0100</pubDate><guid>http://karpoke.ignaciocano.com/2011/03/29/desordenando-listas-en-python/</guid><description>&lt;p&gt;Si tenemos una lista de elementos, por ejemplo:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; l = [ 2, 3, 5, 7, 11, 13, 17, 19 ]
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;img alt="Deck Card Shuffler" loading="lazy" src="http://karpoke.ignaciocano.com/images/deck_card_shuffler-300x213.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Y queremos desordenarla, pero con la condición de que ningún elemento
ocupe la misma posición que ocupaba originalmente, podemos aplicar el
&lt;a href="http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle#Sattolo.27s_algorithm"&gt;algoritmo de Sottolo&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; from random import randrange
&amp;gt;&amp;gt;&amp;gt; def sattoloCycle(items):
... i = len(items)
... while i &amp;gt; 1:
... i = i - 1
... j = randrange(i) # 0 &amp;lt; = j &amp;lt;= i-1
... items[j], items[i] = items[i], items[j]
... return
&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt;&amp;gt;&amp;gt; sattoloCycle(l)
&amp;gt;&amp;gt;&amp;gt; print l
[5, 17, 3, 2, 7, 11, 13]
&lt;/code&gt;&lt;/pre&gt;</description></item></channel></rss>