Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Surprised by the command "del"

0 views
Skip to first unread message

K Viltersten

unread,
Mar 1, 2008, 3:05:41 PM3/1/08
to
I'm reading the docs and at 5.2 the del
statement is discussed. At first, i thought
i've found a typo but as i tried that
myself, it turns it actually does work so.

a = ["alpha", "beta", "gamma"]
del a[2:2]
a

Now, i expected the result to be that the
"beta" element has been removed. Obviously,
Python thinks otherwise. Why?!

Elaboration:
I wonder why such an unintuitive effect has
been implemented. I'm sure it's for a very
good reason not clear to me due to my
ignorance. Alternatively - my expectations
are not so intuitive as i think. :)

--
Regards
Konrad Viltersten
--------------------------------
sleep - a substitute for coffee for the poor
ambition - lack of sense to be lazy

casti...@gmail.com

unread,
Mar 1, 2008, 2:59:43 PM3/1/08
to
On Mar 1, 2:05 pm, "K Viltersten" <t...@viltersten.com> wrote:
> I'm reading the docs and at 5.2 the del
> statement is discussed. At first, i thought
> i've found a typo but as i tried that
> myself, it turns it actually does work so.
>
>   a = ["alpha", "beta", "gamma"]
>   del a[2:2]
>   a
>
> Now, i expected the result to be that the
> "beta" element has been removed. Obviously,
> Python thinks otherwise. Why?!
>
> Elaboration:
> I wonder why such an unintuitive effect has
> been implemented. I'm sure it's for a very
> good reason not clear to me due to my
> ignorance. Alternatively - my expectations
> are not so intuitive as i think.   :)

It's the Phillips vs. the flathead. Is b in x[a:b:c] an endpoint or a
distance?

This is Python too; you're welcome to implement:
- b means length
- one-based indices
- inclusive
- b out of bounds exceptions

A slice object (a,b,c) is passed to
whatevercollection.__getitem__, .__setitem__, or .__delitem__.

Steve Holden

unread,
Mar 1, 2008, 3:01:51 PM3/1/08
to pytho...@python.org
K Viltersten wrote:
> I'm reading the docs and at 5.2 the del
> statement is discussed. At first, i thought
> i've found a typo but as i tried that
> myself, it turns it actually does work so.
>
> a = ["alpha", "beta", "gamma"]
> del a[2:2]
> a
>
> Now, i expected the result to be that the
> "beta" element has been removed. Obviously,
> Python thinks otherwise. Why?!
>
> Elaboration:
> I wonder why such an unintuitive effect has
> been implemented. I'm sure it's for a very
> good reason not clear to me due to my
> ignorance. Alternatively - my expectations
> are not so intuitive as i think. :)
>
It deletes all the elements referred to by the slice. But since 2-2==0,
there are zero elements in the slice, and the list is unchanged when all
zero of them have been deleted:

>>> a = ["alpha", "beta", "gamma"]

>>> a[2:2]
[]
>>>

You would have got the result you expected with

del a[2]

or

del a[2:3]

or

del a[-1]

or ...

Remember that slices are specified as half-open intervals. So a[m:n]
includes m-n elements, those indexed from m to n-1.

regards
Steve
--
Steve Holden +1 571 484 6266 +1 800 494 3119
Holden Web LLC http://www.holdenweb.com/

Message has been deleted

K Viltersten

unread,
Mar 1, 2008, 4:33:36 PM3/1/08
to
>> I'm reading the docs and at 5.2 the del
>> statement is discussed. At first, i thought
>> i've found a typo but as i tried that
>> myself, it turns it actually does work so.
>>
>> a = ["alpha", "beta", "gamma"]
>> del a[2:2]
>> a
>>
>> Now, i expected the result to be that the
>> "beta" element has been removed. Obviously,
>> Python thinks otherwise. Why?!
>
> Remember that slices are specified as half-open
> intervals. So a[m:n] includes m-n elements,
> those indexed from m to n-1.

Got it. Thanks!

Unknown

unread,
Mar 1, 2008, 5:42:14 PM3/1/08
to
On Sat, 1 Mar 2008 21:05:41 +0100, "K Viltersten"
<tm...@viltersten.com> wrote:

>I'm reading the docs and at 5.2 the del
>statement is discussed. At first, i thought
>i've found a typo but as i tried that
>myself, it turns it actually does work so.
>
> a = ["alpha", "beta", "gamma"]
> del a[2:2]
> a
>
>Now, i expected the result to be that the
>"beta" element has been removed. Obviously,
>Python thinks otherwise. Why?!
>
>Elaboration:
>I wonder why such an unintuitive effect has
>been implemented. I'm sure it's for a very
>good reason not clear to me due to my
>ignorance. Alternatively - my expectations
>are not so intuitive as i think. :)


I think it should say
del a[1:2]
then it works


K Viltersten

unread,
Mar 1, 2008, 7:32:06 PM3/1/08
to
>>I'm reading the docs and at 5.2 the del
>>statement is discussed. At first, i thought
>>i've found a typo but as i tried that
>>myself, it turns it actually does work so.
>>
>> a = ["alpha", "beta", "gamma"]
>> del a[2:2]
>> a
>>
>>Now, i expected the result to be that the
>>"beta" element has been removed. Obviously,
>>Python thinks otherwise. Why?!
>>
>>Elaboration:
>>I wonder why such an unintuitive effect has
>>been implemented. I'm sure it's for a very
>>good reason not clear to me due to my
>>ignorance. Alternatively - my expectations
>>are not so intuitive as i think. :)
>
> I think it should say
> del a[1:2]
> then it works


While i'm thankful for the advice, i need to
point out that the question wasn't "how to"
but "why". Anyhow, it's been explained as a
matter of definition of a "slice".

0 new messages