Python - 将列表范围设置为特定值

时间:2012-07-09 12:31:39

标签: python list python-2.7

我需要根据带有边界(start,end)的元组将列表的子集设置为特定值。

目前我正在这样做:

indexes = range(bounds[0], bounds[1] + 1)
for i in indexes:
   my_list[i] = 'foo'

这对我来说似乎不太好。有更多的pythonic方法吗?

3 个答案:

答案 0 :(得分:13)

使用切片分配:

my_list[bounds[0]:bounds[1] + 1] = ['foo'] * ((bounds[1] + 1) - bounds[0])

或使用局部变量仅添加+ 1一次:

lower, upper = bounds
upper += 1
my_list[lower:upper] = ['foo'] * (upper - lower)

您可能希望将上限存储为非包含,以便更好地使用python并避免所有+ 1计数。

演示:

>>> 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]

答案 1 :(得分:3)

>>> L = list("qwerty")
>>> L
['q', 'w', 'e', 'r', 't', 'y']
>>> L[2:4] = ["foo"] * (4-2)
>>> L
['q', 'w', 'foo', 'foo', 't', 'y']

答案 2 :(得分:1)

以下是@MartijnPieters使用itertools.repeat

提供的更高效的解决方案
import itertools
lower, upper = bounds
upper += 1
my_list[lower:upper] = itertools.repeat('foo', (upper - lower))