Skip to content Skip to sidebar Skip to footer

Set Item At Multiple Indexes In A List

I am trying to find a way to use a list of indexes to set values at multiple places in a list (as is possible with numpy arrays). I found that I can map __getitem__ and a list of i

Solution 1:

The difference between the get and set case is that in the get case you are interested in the result of map itself, but in the set case you want a side effect. Thus, you never consume the map generator and the instructions are never actually executed. Once you do, b_list gets changed as expected.

>>> put_map = map(b_list.__setitem__, idxs, ['YAY', 'YAY']) 
>>> b_list                                                                  
['a', 'b', 'c']
>>> list(put_map)                                                           
[None, None]
>>> b_list                                                                 
['YAY', 'YAY', 'c']

Having said that, the proper way for get would be a list comprehension and for set a simple for loop. That also has the advantage that you do not have to repeat the value to put in place n times.

>>> for i in idxs: b_list[i] = "YAY">>> [b_list[i] for i in idxs]                                              
['YAY', 'YAY']

Post a Comment for "Set Item At Multiple Indexes In A List"