From: candide on 21 Apr 2010 15:56 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] ? From: Simon Brunning on 21 Apr 2010 16:12 On 21 April 2010 20:56, candide wrote:> Is the del instruction able to remove _at the same_ time more than one > element from a list ? Yup: >>> z=[45,12,96,33,66,'ccccc',20,99] >>> del z[:] >>> z [] -- Cheers, Simon B. From: Gary Herron on 21 Apr 2010 16:40 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] Yes, those are equivalent. The reason it fails is that, by the time it gets around to the third delete, there is no longer in index [6] in the list. The element you were thinking of is now at index [4]. This, however, will work as you expected: del z[6], z[3],z[2] -- Gary Herron, PhD. Department of Computer Science DigiPen Institute of Technology (425) 895-4418 From: Mensanator on 21 Apr 2010 16:49 On Apr 21, 2: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] That's part of the problem. Let's look at a better example. >>> z = [0,1,2,3,4,5,6] >>> del z[0],z[3],z[6] Traceback (most recent call last): File "", line 1, in del z[0],z[3],z[6] IndexError: list assignment index out of range>>> z [1, 2, 3, 5, 6] Yes, the error was caused by the list shrinking between calls, so the 6 did not get deleted. But notice that 3 is still there and 4 is missing. If you must delete this way, do it bottom up so that the index remains valid for the subsequent calls: >>> z = [0,1,2,3,4,5,6] >>> del z[6],z[3],z[0] >>> z [1, 2, 4, 5] > > ? From: Emile van Sebille on 21 Apr 2010 16:57 On 4/21/2010 12:56 PM candide said...> 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] Not as I see it -- watch your index values - they change after each delete is completed. It'll work if you order them backwards though. >>> a = range(10) >>> del a[0],a[2],a[4],a[6] >>> a [1, 2, 4, 5, 7, 8]>>> a = range(10) >>> del a[6],a[4],a[2],a[0] >>> a [1, 3, 5, 7, 8, 9]>>> Emile  |  Next  |  Last Pages: 1 2 Prev: xml.dom.minidom character encodingNext: Smtpd module