On Nov 12, 9:09 pm, Steve Howell <showel...@yahoo.com> wrote: > On Nov 12, 7:21 am, rusi <rustompm...@gmail.com> wrote: > > > On Nov 12, 12:09 pm, rusi <rustompm...@gmail.com> wrote:> This is a classic > > problem -- structure clash of parallel loops > > > <rest snipped> > > > Sorry wrong solution :D > > > The fidgetiness is entirely due to python not allowing C-style loops > > like these: > > > >> while ((c=getchar()!= EOF) { ... } > > [...] > > There are actually three fidgety things going on: > > 1. The API is 1-based instead of 0-based. > 2. You don't know the number of pages in advance. > 3. You want to process tweets, not pages of tweets. > > Here's yet another take on the problem: > > # wrap fidgety 1-based api > def search(i): > return api.GetSearch("foo", i+1) > > paged_tweets = (search(i) for i in count()) > > # handle sentinel > paged_tweets = iter(paged_tweets.next, []) > > # flatten pages > tweets = chain.from_iterable(paged_tweets) > for tweet in tweets: > process(tweet)
[Steve Howell] Nice on the whole -- thanks Could not the 1-based-ness be dealt with by using count(1)? ie use paged_tweets = (api.GetSearch("foo", i) for i in count(1)) {Peter] > >>> while ((c=getchar()!= EOF) { ... } for c in iter(getchar, EOF): ... Thanks. Learnt something -- http://mail.python.org/mailman/listinfo/python-list