Python 如何替换布尔列表序列中的值?

Python 如何替换布尔列表序列中的值?,python,arrays,pandas,list,numpy,Python,Arrays,Pandas,List,Numpy,我有这样一份清单: list_1 = [True, False, True, False, True, True, True, False, False, False, True, True, False] 在此列表中,有一些序列以False开头,以True结尾。我需要帮助以这种方式替换此列表的值: 用-2^k系列替换这些序列的False值。每个序列的最后一个False之后的True值是+2^k,其中k作为值在序列中的位置 其他不属于这些序列的True值将保留值1 输出如下所示: list

我有这样一份清单:

list_1 = [True, False, True, False, True, True, True, False, False, False, True, True, False]
在此列表中,有一些序列以
False
开头,以
True
结尾。我需要帮助以这种方式替换此列表的值:

  • -2^k
    系列替换这些序列的
    False
    值。每个序列的最后一个
    False
    之后的
    True
    值是
    +2^k
    ,其中
    k
    作为值在序列中的位置
  • 其他不属于这些序列的
    True
    值将保留值
    1
输出如下所示:

list_2 = [1, -1, 2, -1, 2, 1, 1, -1, -2, -4, 8, 1, -1]

由于您标记了熊猫:

# turn data into series
s = pd.Series(list_1)

# mark the blocks ending with True
blocks = s.shift(fill_value=0).cumsum()

# compute the positions within blocks and raise to power 2
powers = 2**s.groupby(blocks).cumcount()

#output:
np.where(s, 1,-1)*powers.values
输出:

array([ 1, -1,  2, -1,  2,  1,  1, -1, -2, -4,  8,  1, -1])

效果很好。谢谢