Steven D'Aprano wrote:

> On Wed, 18 Feb 2009 07:08:04 +1100, Jervis Whitley wrote:
> 
> 
>>> This moves the for-loop out of slow Python into fast C and should be
>>> much, much faster for very large input.
>>>
>>>
>> _Should_ be faster.
> 
> Yes, Python's timing results are often unintuitive.

Indeed.

> It seems to me that I was mistaken -- for large enough input, the running
> time of each version converges to approximately the same speed.

No, you were right. Both any_test() and for_test() use the improvement you 
suggested, i. e. loop over the vowels, not the characters of the word.
Here's the benchmark as it should have been:

$ python -m timeit -s'word = "g"*10000' 'any(v in word for v in "aeiouAEIOU")'
1000 loops, best of 3: 314 usec per loop
$ python -m timeit -s'word = "g"*10000' 'any(c in "aeiouAEIOU" for c in word)'
100 loops, best of 3: 3.48 msec per loop

Of course this shows only the worst case behaviour. The results will vary 
depending on the actual word e. g. "Ug..." or "g...a".

Peter 

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

Reply via email to