Как заменить значение в последовательностях логического списка? - PullRequest
2 голосов
/ 08 мая 2020

У меня есть такой список:

list_1 = [True, False, True, False, True, True, True, False, False, False, True, True, False]

В этом списке есть последовательности, которые начинаются с False и заканчиваются True. Мне нужна помощь в реализации замены значений этого списка следующим образом:

  • Замените False значения этих последовательностей на серию -2^k. Значение True после последнего False каждой последовательности равно +2^k, где k является позицией значения в последовательности.
  • Другие True значения, которые не принадлежат ни одной из этих последовательностей, сохранят значение 1.

Результат выглядит так:

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

1 Ответ

3 голосов
/ 08 мая 2020

Поскольку вы отметили pandas:

# 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...