Velocity Reviews > assignment with [:]

# assignment with [:]

Ben Bush
Guest
Posts: n/a

 12-28-2008
Hi,

I saw this line of code on a recent post:

a1[:] = [x*3 for x in a1]

Could somebody tells me what the [:] means? I can't find it anywhere.
See context below if needed:

On Dec 26, 4:46 pm, Tim Chase <(E-Mail Removed)> wrote:
> > What does *not* work is
> > 3 * [0,1,2]
> > As you know, this gives
> > [0,1,2,0,1,2,0,1,2]
> > What I am hoping for is
> > [0,3,6]
> > I see that I can use
> > numpy.multiply(3,range(3))
> > but this seems overkill to me. Can you tell I am coming to Python from
> > Matlab?

>
> The common way to do this is just
>
> a1 = [0,1,2]
> a2 = [x * 3 for x in a1]
>
> or, if you need a1 to be done in place:
>
> a1[:] = [x*3 for x in a1]
>
> -tkc

Robert Kern
Guest
Posts: n/a

 12-28-2008
Ben Bush wrote:
> Hi,
>
> I saw this line of code on a recent post:
>
> a1[:] = [x*3 for x in a1]
>
> Could somebody tells me what the [:] means? I can't find it anywhere.

It's a slice assignment. When both the start and stop arguments are omitted, it
refers to the entire sequence. In this case, it means to replace the entire
contents of the list a1 with the value on the right-hand-side.

"a[2:4] = ..." would replace the 3rd and 4th items in the list with the sequence
on the right-hand-side, for instance.

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
that is made terrible by our own mad attempt to interpret it as though it had
an underlying truth."
-- Umberto Eco

James Stroud
Guest
Posts: n/a

 12-28-2008
Ben Bush wrote:
> On Dec 26, 4:46 pm, Tim Chase <(E-Mail Removed)> wrote:
>>> What does *not* work is
>>> 3 * [0,1,2]
>>> As you know, this gives
>>> [0,1,2,0,1,2,0,1,2]
>>> What I am hoping for is
>>> [0,3,6]
>>> I see that I can use
>>> numpy.multiply(3,range(3))
>>> but this seems overkill to me. Can you tell I am coming to Python from
>>> Matlab?

>> The common way to do this is just
>>
>> a1 = [0,1,2]
>> a2 = [x * 3 for x in a1]
>>
>> or, if you need a1 to be done in place:
>>
>> a1[:] = [x*3 for x in a1]

There is some subtlety here. The latter says to empty the list assigned
to the name "a1" and refill it with the products. Other references to
the same list will now reflect this operation. This procedure is not
equivalent to reassigning the name "a1". For example:

py> a = [1, 2, 3]
py> a1 = a
py> a1[:] = [x*3 for x in a1]
py> a1
[3, 6, 9]
py> a1
[3, 6, 9]

Whereas:

py> a = [1, 2, 3]
py> a1 = a
py> a1
[1, 2, 3]
py> a1 = [x*3 for x in a1]
py> a1
[3, 6, 9]
py> a
[1, 2, 3]

James

--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com

James Stroud
Guest
Posts: n/a

 12-28-2008
James Stroud wrote:
> py> a = [1, 2, 3]
> py> a1 = a
> py> a1[:] = [x*3 for x in a1]
> py> a1
> [3, 6, 9]
> py> a1
> [3, 6, 9]

This should have been:

py> a = [1, 2, 3]
py> a1 = a
py> a1[:] = [x*3 for x in a1]
py> a
[3, 6, 9]
py> a1
[3, 6, 9]

James

--
James Stroud
UCLA-DOE Institute for Genomics and Proteomics
Box 951570
Los Angeles, CA 90095

http://www.jamesstroud.com

 Thread Tools

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are Off Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post Chris C++ 34 09-26-2006 04:26 AM nagy Python 36 07-20-2006 07:24 PM HOESan Wireless Networking 4 09-04-2004 08:36 PM Anand P Paralkar VHDL 2 08-04-2003 08:40 PM itsme VHDL 1 07-23-2003 03:26 PM

Advertisments