Lazy iteration of words in a file (was Re: Code block literals)
Dave Benjamin
ramen at lackingtalent.com
Fri Oct 10 18:57:15 EDT 2003
More information about the Python-list mailing list
Fri Oct 10 18:57:15 EDT 2003
- Previous message (by thread): Code block literals
- Next message (by thread): Code block literals
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
In article <qCFhb.262547$R32.8510844 at news2.tin.it>, Alex Martelli wrote: > > I think that using methods for such things is not a particularly good idea. > > A generator that takes a sequence (typically an iterator) of strings and > returns as the items the single bytes or words is more general: > > def eachbyte(seq): > for s in seq: > for c in s: > yield c > > def eachword(seq): > for s in seq: > for w in s.split(): > yield w > > and now you can loop "for b in eachbyte(file("input.txt")):" etc -- AND you > have also gained the ability to loop per-byte or per-word on any other > sequence of strings. Actually eachbyte is much more general than its > name suggests -- feed it e.g. a list of files, and it will return the lines > of each file -- one after the other -- as a single sequence. eachbyte is in fact so general, I'd be tempted to give it the name "iflatten", though I can never decide whether a shallow flatten or a recursive flatten is worthy of the name "flatten". Here's another way to loop through words lazily, this time using itertools: import string from itertools import imap def iflatten(seq): for subseq in seq: for item in subseq: yield item for word in iflatten(imap(string.split, file('input.txt'))): print word -- .:[ dave benjamin (ramenboy) -:- www.ramenfest.com -:- www.3dex.com ]:. : d r i n k i n g l i f e o u t o f t h e c o n t a i n e r :
- Previous message (by thread): Code block literals
- Next message (by thread): Code block literals
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list