I need to set a subset of a list to a specific value based on a tuple with bounds (start,end)
.
Currently I\'m doing this:
indexes = rang
Use slice assignment:
my_list[bounds[0]:bounds[1] + 1] = ['foo'] * ((bounds[1] + 1) - bounds[0])
or using local variables to add your + 1
only once:
lower, upper = bounds
upper += 1
my_list[lower:upper] = ['foo'] * (upper - lower)
You may want to store the upper bound as non-inclusive, to play better with python and avoid all the + 1
counts.
Demo:
>>> my_list = range(10)
>>> bounds = (2, 5)
>>> my_list[bounds[0]:bounds[1] + 1] = ['foo'] * ((bounds[1] + 1) - bounds[0])
>>> my_list
[0, 1, 'foo', 'foo', 'foo', 'foo', 6, 7, 8, 9]
>>> L = list("qwerty")
>>> L
['q', 'w', 'e', 'r', 't', 'y']
>>> L[2:4] = ["foo"] * (4-2)
>>> L
['q', 'w', 'foo', 'foo', 't', 'y']
Here is a more efficient version of the solution by @MartijnPieters using itertools.repeat
import itertools
lower, upper = bounds
upper += 1
my_list[lower:upper] = itertools.repeat('foo', (upper - lower))