Stefan Behnel, 10.05.2010 08:54:
dasacc22, 08.05.2010 19:19:
This is a simple question. I'm looking for the fastest way to
calculate the leading whitespace (as a string, ie ' ').

Here is an (untested) Cython 0.13 solution:

    from cpython.unicode cimport Py_UNICODE_ISSPACE

    def leading_whitespace(unicode ustring):
        cdef Py_ssize_t i
        cdef Py_UNICODE uchar

        for i, uchar in enumerate(ustring):
            if not Py_UNICODE_ISSPACE(uchar):
                return ustring[:i]
        return ustring

Cython compiles this to the obvious C code, so this should be impossible
to beat in plain Python code.

... and it is. For a simple string like

    u = u"   abcdefg" + u"fsdf"*20

timeit gives me this for "s=u.lstrip(); u[:-len(s)]":

1000000 loops, best of 3: 0.404 usec per loop

and this for "leading_whitespace(u)":

10000000 loops, best of 3: 0.0901 usec per loop

It's closer for the extreme case of an all whitespace string like " "*60, where I get this for the lstrip variant:

1000000 loops, best of 3: 0.277 usec per loop

and this for the Cython code:

10000000 loops, best of 3: 0.177 usec per loop

But I doubt that this is the main use case of the OP.

Stefan

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to