Python 在列表切片中插入重复值
我有一张布尔人的名单。我还有一个开始和结束索引列表。在我的布尔值列表中,我希望每个值都是Python 在列表切片中插入重复值,python,Python,我有一张布尔人的名单。我还有一个开始和结束索引列表。在我的布尔值列表中,我希望每个值都是True,除非它位于索引列表中定义的一个切片中。我写的东西感觉很笨重,有什么好的建议吗 bools = [True] * 15 events = [(3, 5), (11, 16)] for e in events: bools[e[0]:e[1]] = [False for x in range(*e)] 具体来说,我不喜欢[False for x in range(*e)]部分。如果我开始摆弄
True
,除非它位于索引列表中定义的一个切片中。我写的东西感觉很笨重,有什么好的建议吗
bools = [True] * 15
events = [(3, 5), (11, 16)]
for e in events:
bools[e[0]:e[1]] = [False for x in range(*e)]
具体来说,我不喜欢[False for x in range(*e)]
部分。如果我开始摆弄切片,则范围(*e)
开始变得混乱,例如:
bools[e[0]:e[1]+2] = [False for x in range(e[0], e[1]+2)]
如果有一种语法可以让列表/切片中的每个值都取相同的值,那就更好了
bools[e[0]:e[1]+2] = False
但这显然不是正确的语法。有什么想法吗?对使用numpy感兴趣吗
bools[e[0]:e[1]+2] = False
在努比工作。你也可以直接创建你自己的,这样你就可以做这样的事情
slices = [np.s_[3:6], np.s_[11:17]]
for s in slices:
bools[s] = False
使用s_完全支持切片语法(步长、从列表末尾索引、省略号),而不仅仅是枚举一个范围,我只想这样做:
events = [(3, 5), (11, 16)]
bools = [True] * 16
for start, end in events:
for index in range(start, end):
bools[index] = False
当然,这只有在避免负指数的情况下才有效。但是,通过创建一个
切片(e[0],e[1])
并调用它的索引(bools)
,然后用它代替e[0]:e[1]
,即使这样也很容易修复。
from itertools import repeat
for e in events:
bools[e[0]: e[1]] = repeat(False, e[1] - e[0])