我有一个布尔值列表
l = [False, False, False, True, False, False, False]
我想变成
l_new = [False, False, False, True, True, True, False]
这意味着,每当我的列表中有一个True时,我想将下面的两个值(例如)切换为true。我的解决办法是
def lagged_effect(l, lag):
l_new = []
L_iter = iter(l)
for elem in L_iter:
if elem == True:
l_new.extend([True]*lag)
if lag == 1:
next(L_iter)
if lag == 2:
next(L_iter)
next(L_iter)
if lag == 3:
next(L_iter)
next(L_iter)
next(L_iter)
if lag == 4:
next(L_iter)
next(L_iter)
next(L_iter)
next(L_iter)
if lag > 4:
print("not defined")
if elem == False:
l_new.append(False)
return l_new
print(l_new)
lagged_effect(l, lag=2)
由于我想更频繁地实现这一点,我想知道是否有一个更紧凑和更有效的解决方案。特别是下一个的实现让我很恼火。
3条答案
按热度按时间ujv3wf0j1#
使用列表shift和zip与boolean或
任意
lag
的选项cbeh67ev2#
你可以写一个自定义函数:
使用pandas的向量替代
8xiog9wr3#
这是一个可能的解决方案: