Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python - set list range to a specific value

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 = range(bounds[0], bounds[1] + 1)
for i in indexes:
   my_list[i] = 'foo'

This doesn't seem good to me. Is there a more pythonic approach?

like image 444
armandino Avatar asked Jul 09 '12 12:07

armandino


People also ask

How do you create a list from range function in Python?

A naive method to create list within a given range is to first create an empty list and append successor of each integer in every iteration of for loop. # list until r2 is reached. We can also use list comprehension for the purpose. Just iterate 'item' in a for loop from r1 to r2 and return all 'item' as list.


1 Answers

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]
like image 151
Martijn Pieters Avatar answered Oct 05 '22 18:10

Martijn Pieters