Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>try <a href="http://docs.python.org/library/itertools.html#itertools.groupby" rel="nofollow noreferrer"><code>itertools.groupby()</code></a> here:</p> <pre><code>&gt;&gt;&gt; from itertools import groupby,islice &gt;&gt;&gt; a = ['a', 'a', 'b', 'c', 'c', 'c', 'b'] &gt;&gt;&gt; [list(g) for k,g in groupby(a)] [['a', 'a'], ['b'], ['c', 'c', 'c'], ['b']] &gt;&gt;&gt; [k for k,g in groupby(a) if len(list(g))&gt;=2] ['a', 'c'] </code></pre> <p>using <code>islice()</code> :</p> <pre><code>&gt;&gt;&gt; [k for k,g in groupby(a) if len(list(islice(g,0,2)))==2] &gt;&gt;&gt; ['a', 'c'] </code></pre> <p>using <code>zip()</code> and <code>izip()</code>:</p> <pre><code>In [198]: set(x[0] for x in izip(a,a[1:]) if x[0]==x[1]) Out[198]: set(['a', 'c']) In [199]: set(x[0] for x in zip(a,a[1:]) if x[0]==x[1]) Out[199]: set(['a', 'c']) </code></pre> <p><code>timeit</code> results:</p> <pre><code>from itertools import * a='aaaabbbccccddddefgggghhhhhiiiiiijjjkkklllmnooooooppppppppqqqqqqsssstuuvv' def grp_isl(): [k for k,g in groupby(a) if len(list(islice(g,0,2)))==2] def grpby(): [k for k,g in groupby(a) if len(list(g))&gt;=2] def chn(): set(x[1] for x in chain(izip(*([iter(a)] * 2)), izip(*([iter(a[1:])] * 2))) if x[0] == x[1]) def dread(): set(a[i] for i in range(1, len(a)) if a[i] == a[i-1]) def xdread(): set(a[i] for i in xrange(1, len(a)) if a[i] == a[i-1]) def inrow(): inRow = [] last = None for x in a: if last == x and (len(inRow) == 0 or inRow[-1] != x): inRow.append(last) last = x def zipp(): set(x[0] for x in zip(a,a[1:]) if x[0]==x[1]) def izipp(): set(x[0] for x in izip(a,a[1:]) if x[0]==x[1]) if __name__=="__main__": import timeit print "islice",timeit.timeit("grp_isl()", setup="from __main__ import grp_isl") print "grpby",timeit.timeit("grpby()", setup="from __main__ import grpby") print "dread",timeit.timeit("dread()", setup="from __main__ import dread") print "xdread",timeit.timeit("xdread()", setup="from __main__ import xdread") print "chain",timeit.timeit("chn()", setup="from __main__ import chn") print "inrow",timeit.timeit("inrow()", setup="from __main__ import inrow") print "zip",timeit.timeit("zipp()", setup="from __main__ import zipp") print "izip",timeit.timeit("izipp()", setup="from __main__ import izipp") </code></pre> <p><strong>output:</strong></p> <pre><code>islice 39.9123107277 grpby 30.1204478987 dread 17.8041124706 xdread 15.3691785568 chain 17.4777339702 inrow 11.8577565327 zip 16.6348844045 izip 15.1468557105 </code></pre> <p><strong>Conclusion:</strong></p> <p><a href="https://stackoverflow.com/a/13020768/846892">Poke's solution</a> is the fastest solution in comparison to other alternatives.</p>
    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.
 

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