Python - set list range to a specific value

前端 未结 3 1918
别那么骄傲
别那么骄傲 2020-12-10 14:06

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         


        
相关标签:
3条回答
  • 2020-12-10 14:30

    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]
    
    0 讨论(0)
  • 2020-12-10 14:40
    >>> L = list("qwerty")
    >>> L
    ['q', 'w', 'e', 'r', 't', 'y']
    >>> L[2:4] = ["foo"] * (4-2)
    >>> L
    ['q', 'w', 'foo', 'foo', 't', 'y']
    
    0 讨论(0)
  • 2020-12-10 14:40

    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))
    
    0 讨论(0)
提交回复
热议问题