Non è un grande fan di questo, ma si potrebbe provare questo (anche se credo che tutto quanto sopra sono molto più conciso e di facile lettura):
In [22]: from operator import setitem
In [23]: mylist = [0, 0, 0, 0, 0]
In [24]: indeces_to_replace = [0, 1, 3]
In [25]: _ = map(lambda x: setitem(mylist, x, 100), indeces_to_replace)
In [26]: mylist
Out[26]: [100, 100, 0, 100, 0]
a parte la leggibilità discutibile e la necessità di un'importazione, @abarnert ha sottolineato un paio di ulteriori problemi, vale a dire che 012.369.crea ancora un elenco non necessario (che viene scartato con lo _
ma creato comunque) e che non funzionerà in Python 3 perché map
returns an iterator in Python 3.x. È possibile utilizzare il modulo six per simulare il comportamento di map
in Python 3.x da Python 2.x, e in combinazione con collections.deque
(sempre come suggerito da @abarnert), è possibile ottenere lo stesso output senza creare l'elenco aggiuntivo in memoria perché uno deque
che può contenere un massimo di 0
elementi scarterà tutto ciò che riceve dall'iter map
(si noti che con six
, viene simulato map
utilizzando itertools.imap
).
Anche in questo caso, non c'è assolutamente alcuna necessità di utilizzare sempre questo - ogni soluzione sopra/sotto è meglio :)
In [1]: from collections import deque
In [2]: from six.moves import map
In [3]: from operator import setitem
In [4]: mylist = [0, 0, 0, 0, 0]
In [5]: indeces_to_replace = [0, 1, 3]
In [6]: deque(map(lambda x: setitem(mylist, x, 100), indeces_to_replace), maxlen=0)
Out[6]: deque([], maxlen=0)
In [7]: mylist
Out[7]: [100, 100, 0, 100, 0]
ne dici di questo? mylist [: 2], mylist [3] = [A] * 2, A –