string issue

Bill Mill bill.mill at gmail.com
Fri Feb 4 15:36:49 EST 2005


On Fri, 04 Feb 2005 15:25:04 -0500, rbt <rbt at athop1.ath.vt.edu> wrote:
> John J. Lee wrote:
> > Steve Holden <steve at holdenweb.com> writes:
> > [...]
> >
> >>You are modifying the list as you iterate over it. Instead, iterate
> >>over a copy by using:
> >>
> >>for ip in ips[:]:
> >>   ...
> >
> >
> > Just to help popularise the alternative idiom, which IMO is
> > significantly less cryptic (sane constructors of mutable objects
> > almost always make a copy, and list is no exception: it's guaranteed
> > to do so):
> >
> > for ip in list(ips):
> >    ...
> >
> >
> > Works back to at least Python 1.5.2.
> >
> >
> > John
> 
> I don't know that that approach is less cryptic. ips is already a
> list... it looks cryptic to make it a list again, doesn't it? IMO, the
> two are equally cryptic. The epitome of clarity would be copy(ips)...
> now *that* makes sense, of course, ips[:] or list(ips) work equally well
> to the programmer who has learned them.

Howsabout:

>>> from copy import copy
>>> ips = ['255.255.255.255', '128.173.120.79', '198.82.247.98',
... '127.0.0.1', '255.0.0.0', '255', '128.173.255.34']
>>> for ip in copy(ips):
...     if '255' in ip:
...             ips.remove(ip)
...
>>> ips
['128.173.120.79', '198.82.247.98', '127.0.0.1']

But I still think that the list comprehension is the best.

Peace
Bill Mill
bill.mill at gmail.com

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



More information about the Python-list mailing list