REALLY need help with iterating a list.

Fredrik Lundh fredrik at pythonware.com
Mon Jun 11 15:23:28 EDT 2007


infidel wrote:

> How about something like this?
> 
> while serverlist:
>     server = serverlist.pop(0)
>     pinger = ping[server]
>     if pinger.returncode==None:
>         pinger.poll()
>         serverlist.append(server)
>     else:
>         pingresult[server] = pinger.stdout.read()
>         pingreturncode[server] = pinger.returncode
> 
> Basic idea:  as long as there are servers in the list, pop the first
> one out of the list, see if it's done, and if it isn't, put it back on
> the end of the list.

here's a simple variation of that, which is a bit more efficient, and 
perhaps also a bit easier to use in the general case:

while serverlist:
     still_active = []
     for server in serverlist:
	pinger = ping[server]
	if pinger.returncode is None:
	    pinger.poll()
	    still_active.append(server)
	else:
	    pingresult[server] = pinger.stdout.read()
	    pingreturncode[server] = pinger.returncode
     serverlist = still_active

</F>




More information about the Python-list mailing list