modifying a list element from a function

Aaron Brady castironpi at gmail.com
Fri Mar 27 10:02:31 EDT 2009


On Mar 27, 4:39 am, TP <Tribulati... at Paralleles.invalid> wrote:
> Hi everybody,
>
> Be a the following list, containing list elements which second field is a
> string.
>
> >>> a = [ [4, "toto"], [5, "cou"] ]
> >>> a[0][1]="tou"
> >>> a
>
> [[4, 'tou'], [5, 'cou']]
>
> OK.
>
> Now, I want:
> * to do the same modification on the list "a" within a function
> * not to hardcode in this function the position of the string in each
> element of a.
>
> At first sight, we think at defining a function like this:
>
> def assign( text_accessor, list_elem, new_textvalue ):
>
>     text_accessor( list_elem ) = new_textvalue
>
> and then doing:
>
> assign( lambda elem: elem[1], a[0], "co" )
>
> But it does not work, we obtain:
>
>     text_accessor( list_elem ) = new_textvalue
> SyntaxError: can't assign to function call
>
> In fact, we should work on the address of text_accessor( list_elem ). How to
> do that?

There is always the __setitem__ method, either bound to the object in
question, or along with an instance and its class.

>>> def f( fun, ind, val ):
...     fun( ind, val )
...
>>> a= [ None ]
>>> f( a.__setitem__, 0, 'abc' )
>>> a
['abc']

Or, you could require your instances to all have a method name to
accomplish it, or use operator.__setitem__.



More information about the Python-list mailing list