[Tutor] Recursive assignment in nested lists

Peter Otten __peter__ at web.de
Sat Aug 4 09:43:03 CEST 2012


Alonzo Quijote wrote:

> Is there a way to define a function which takes
>    a list (of lists),
>    a position specified by a list of integers [i0,i1,...,in], and
>    a value
> and returns the result of setting
>     list[i0][i1]...[in]=value
> 
> The following function works for positions up to length 3 only.
> Is it possible to write a general function that does this?
> 
> def setValueAtPosition(list,pos,value):
>     if len(pos)==1:
>         list[pos[0]]=value
>     elif len(pos)==2:
>         list[pos[0]][pos[1]]=value
>     elif len(pos)==3:
>         list[pos[0]][pos[1]][pos[2]]=value
>     return list
> 
> For example
>>>> aa=[1,2,[3,4]]
> 
>>>> setValueAtPosition(aa,[2,0],5)
> [1, 2, [5, 4]]
> 
>>>> aa
> [1, 2, [5, 4]]

You have been shown working solutions, but for the learning experience it 
will be instructive to try and come up with a recursive solution. Here's a 
sketch:

def setValueAtPosition(list, pos, value):
    if len(pos) == 1:
        list[pos[0]] = value
    else:
        inner_list = ...
        new_pos = ...
        setValueAtPosition(inner_list, new_pos, value)

Can you fill in the blanks?



More information about the Tutor mailing list