Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Using a List data structure isn't an efficient way to do this. A <strong>Queue</strong> would be more appropriate. In any case:</p> <p><strong>Using a Queue</strong></p> <p>As I suggested, using a Queue (<a href="http://docs.python.org/library/collections.html#collections.deque" rel="nofollow">collections.deque</a>):</p> <pre><code>&gt;&gt;&gt; q = collections.deque([1,2,3,4,5,6,7,8]) &gt;&gt;&gt; for _ in xrange(5): ... q.rotate(-1) ... &gt;&gt;&gt; q deque([6, 7, 8, 1, 2, 3, 4, 5]) </code></pre> <p><strong>Keeping the List</strong></p> <pre><code>&gt;&gt;&gt; a = [1,2,3,4,5,6,7,8] &gt;&gt;&gt; for _ in xrange(5): ... a = a[1:] + a[:1] ... &gt;&gt;&gt; a [6, 7, 8, 1, 2, 3, 4, 5] </code></pre> <p>Alternatively (faster than the previous one):</p> <pre><code>&gt;&gt;&gt; a = [1,2,3,4,5,6,7,8] &gt;&gt;&gt; for _ in xrange(5): ... a.append(a.pop(0)) ... &gt;&gt;&gt; a [6, 7, 8, 1, 2, 3, 4, 5] </code></pre> <p>Here you can change xrange for whatever you want to iterate over.</p> <p>Timeit analysis: </p> <p><strong>Pop-Append</strong></p> <pre><code>&gt;&gt;&gt; timeit.timeit('a.append(a.pop(0))', setup='a = [0,1,2,3,4,5,6,7,8,9]', number=1000000) 0.24548697471618652 &gt;&gt;&gt; timeit.timeit('a.append(a.pop(0))', setup='a = [0,1,2,3,4,5,6,7,8,9]', number=100000000) 23.65538215637207 </code></pre> <p><strong>Slicing</strong></p> <pre><code>&gt;&gt;&gt; timeit.timeit('a=a[1:] + a[:1]', setup='a = [0,1,2,3,4,5,6,7,8,9]', number=1000000) 0.36037278175354004 &gt;&gt;&gt; timeit.timeit('a=a[1:] + a[:1]', setup='a = [0,1,2,3,4,5,6,7,8,9]', number=100000000) 35.06173801422119 </code></pre> <p><strong>Queue</strong></p> <pre><code>&gt;&gt;&gt; timeit.timeit('q.rotate(-1)', setup='import collections; q = collections.deque([0,1,2,3,4,5,6,7,8])', number=1000000) 0.16829514503479004 &gt;&gt;&gt; timeit.timeit('q.rotate(-1)', setup='import collections; q = collections.deque([0,1,2,3,4,5,6,7,8])', number=100000000) 16.012277841567993 </code></pre> <p>With a little optimization, basically removing the __getattr__ call for append, pop and rotate:</p> <p><strong>Pop-Append</strong></p> <pre><code>&gt;&gt;&gt; timeit.timeit('aa(ap(0))', setup='a = [0,1,2,3,4,5,6,7,8,9]; aa=a.append; ap=a.pop', number=1000000) 0.15255093574523926 &gt;&gt;&gt; timeit.timeit('aa(ap(0))', setup='a = [0,1,2,3,4,5,6,7,8,9]; aa=a.append; ap=a.pop', number=100000000) 14.50795292854309 </code></pre> <p><strong>Queue</strong></p> <pre><code>&gt;&gt;&gt; timeit.timeit('r(-1)', setup='import collections; q = collections.deque([0,1,2,3,4,5,6,7,8]); r=q.rotate', number=1000000) 0.13374090194702148 &gt;&gt;&gt; timeit.timeit('r(-1)', setup='import collections; q = collections.deque([0,1,2,3,4,5,6,7,8]); r=q.rotate', number=100000000) 11.435136079788208 </code></pre>
    singulars
    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.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      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