That certainly is fast, unfortunately it doesn't pass all of the tests. I came up with those tests so I don't know how important they are to the original poster. I modified it and came up with a generator and a non-generator version based (roughly) on your algorithm, that are almost as quick, and pass all of the tests. Some of the modifications were done just to make it quicker, so it would be fair when comparing against the other methods. I hard-coded the comparison instead of using a function and created a function that directly generates and returns a list instead of a generator. I would probably use the generator version in my code, but wrapping `list' around a generator adds about 4us (on my machine). Anyway, getgroups7 passes all of the tests I mentioned and it was timed at 10.37usec/pass. The down side: the code doesn't seem nearly as elegant.
Matt <code> def gengroups7(seq): iseq = iter(xrange(len(seq))) start = 0 for i in iseq: if seq[i]&0x80: start = i break else: return for i in iseq: if seq[i]&0x80: yield seq[start:i] start = i yield seq[start:] def getgroups7(seq): groups = [] iseq = iter(xrange(len(seq))) start = 0 for i in iseq: if seq[i]&0x80: start = i break else: return groups for i in iseq: if seq[i]&0x80: groups.append(seq[start:i]) start = i groups.append(seq[start:]) return groups </code>
-- http://mail.python.org/mailman/listinfo/python-list