Frankenstring
Andreas Lobinger
andreas.lobinger at netsurf.de
Wed Jul 13 09:43:37 EDT 2005
Aloha,
Thomas Lotze wrote:
> I think I need an iterator over a string of characters pulling them out
> one by one, like a usual iterator over a str does. At the same time the
> thing should allow seeking and telling like a file-like object:
>>>>f = frankenstring("0123456789")
>>>>for c in f:
> ... print c
> ... if c == "2":
> ... break
> ...
> 0
> 1
> 2
>>>>f.tell()
> 3L
>>>>f.seek(7)
>>>>for c in f:
> ... print c
> ...
> 7
> 8
> 9
> I can think of more than one clumsy way to implement the desired
> behaviour in Python; I'd rather like to know whether there's an
> implementation somewhere that does it fast. (Yes, it's me and speed
> considerations again; this is for a tokenizer at the core of a library,
> and I'd really like it to be fast.)
You can already think my answer, because i'm doing this
at the core of a similar library, but to give others
the chance to discuss.
>>> f = "0123456789"
>>> p = 0
>>> t2 = f.find('2')+1
>>> for c in f[p:t2]:
... print c
...
0
1
2
>>> p = 7
>>> for c in f[p:]:
... print c
...
7
8
9
A string, and a pointer on that string. If you give up the
boundary condition to tell backwards, you can start to eat up
the string via f = f[p:]. There was a performance difference
with that, in fact it was faster ~4% on a python2.2.
I dont't expect any iterator solution to be faster than
that.
Wishing a happy day
LOBI
More information about the Python-list
mailing list