Nie wielkim fanem tego jednego, ale można spróbować (chociaż myślę, że wszystkie powyższe są znacznie bardziej zwięzły i łatwy do odczytania):
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]
Oprócz wątpliwej czytelności i konieczność importu, @abarnert wskazał kilka dodatkowych kwestii, a mianowicie, że map
nadal tworzy niepotrzebną listę (która jest odrzucana przez _
, ale mimo to została utworzona) i że nie będzie działać w Pythonie 3, ponieważ map
returns an iterator w Pythonie 3.x. Możesz użyć modułu six do symulacji zachowania się map
w Pythonie 3.x z Pythona 2.x, oraz w połączeniu z collections.deque
(ponownie zgodnie z sugestią @abarnert), można osiągnąć to samo wyjście bez tworzenia dodatkowej listy w pamięci, ponieważ deque
, który może zawierać maksymalnie 0
elementów, odrzuci wszystko, co otrzymuje z iteratora map
(Zauważ, że z six
, map
jest symulowany za pomocą itertools.imap
).
Ponownie, nie ma absolutnie żadnej potrzeby, aby kiedykolwiek to wykorzystać - każde rozwiązanie powyżej/poniżej jest lepiej :)
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]
Jak chodzi? mylist [: 2], mylist [3] = [A] * 2, A –