From: candide on 21 Apr 2010 18:45 Thanks for your reponses. From: Raymond Hettinger on 25 Apr 2010 03:17 On Apr 21, 12:56 pm, candide wrote:> Is the del instruction able to remove _at the same_ time more than one > element from a list ? > > For instance, this seems to be correct : > >  >>> z=[45,12,96,33,66,'ccccc',20,99] >  >>> del z[2], z[6],z[0] >  >>> z > [12, 33, 66, 'ccccc', 20] >  >>> > > However, the following doesn't work : > >  >> z=[45,12,96,33,66,'ccccc',20,99] >  >>> del z[2], z[3],z[6] > Traceback (most recent call last): >    File "", line 1, in > IndexError: list assignment index out of range >  >>> > > Does it mean the instruction > > del z[2], z[3],z[6] > > to be equivalent to the successive calls > > del z[2] > del z[3] > del z[6] > > ? Looks like you got a lot of good answers to the question as asked. FWIW, successive delete operations on a list are dog slow. It is better to delete all of the entries in one pass. There are several ways to do it. Here's one: >>> z=[45,12,96,33,66,'ccccc',20,99] >>> targets = [2, 3, 6] >>> PLACEHOLDER = object() >>> for i in targets: .... z[i] = PLACEHOLDER>>> z[:] = [elem for elem in z if elem is not PLACEHOLDER] Here's another: >>> z=[45,12,96,33,66,'ccccc',20,99] >>> targets = set([2, 3, 6]) >>> z[:] = [elem for i, elem in enumerate(z) if i not in targets] Besides being scaleable, these two examples have some nice learning points. Hopefully, you will find them useful. Raymond First  |  Prev  |  Pages: 1 2 Prev: xml.dom.minidom character encodingNext: Smtpd module