[Tutor] List comprehensions

Dinesh B Vadhia dineshbvadhia at hotmail.com
Thu Apr 10 08:15:44 CEST 2008


Kent

I'm using a Javascript autocomplete plugin for an online web application/service.  Each time a user inputs a character, the character is sent to the backend Python program which searches for the character in a list of >10,000 string items.  Once it finds the character, the backend will return that string and N other adjacent string items where N can vary from 20 to 150.  Each string item is sent back to the JS in separate print statements.  Hence, the for loop.

Now, N = 20 to 150 is not a lot (for a for loop) but this process is performed each time the user enters a character.  Plus, there will be thousands (possibly more) users at a time.  There is also the searching of the >10,000 string items using the entered character.  All of this adds up in terms of performance.

I haven't done any profiling yet as we are still building the system but it seemed sensible that replacing the for loop with a built-in would help.  Maybe not?

Hope that helps.

Dinesh


----- Original Message ----- 
From: Kent Johnson 
To: Dinesh B Vadhia 
Cc: tutor at python.org 
Sent: Wednesday, April 09, 2008 1:48 PM
Subject: Re: [Tutor] List comprehensions


Dinesh B Vadhia wrote:
> Here is a for loop operating on a list of string items:
>  
> data = ["string 1", "string 2", "string 3", "string 4", "string 5", 
> "string 6", "string 7", "string 8", "string 9", "string 10", "string 11"]
>  
> result = ""
> for item in data:
>     result = <some operation on> item
>     print result
>  
> I want to replace the for loop with another structure to improve 
> performance (as the data list will contain >10,000 string items].  At 
> each iteration of the for loop the result is printed (in fact, the 
> result is sent from the server to a browser one result line at a time)

Any savings you have from optimizing this loop will be completely 
swamped by the network time. Why do you think this is a bottleneck?

You could use
[ sys.stdout.write(some operation on item) for item in data ]

but I consider this bad style and I seriously doubt you will see any 
difference in performance.

> The for loop will be called continuously and this is another reason to 
> look for a potentially better structure preferably a built-in.

What do you mean 'called continuously'?

Kent
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/tutor/attachments/20080409/a3c9df4f/attachment.htm 


More information about the Tutor mailing list