Предположим, у меня есть список:
list1 = [16620, 22032, 0, 0, 0, 136813, 137899, 0, 199546, 204804]
Я ищу новый список, который вычитает каждое «ненулевое» значение из следующего «ненулевого» значения, например 22032-16620, 137899-136813. Нулевые значения останутся нетронутыми. В дополнение к этому вычтенное «ненулевое» значение должно измениться на ноль. Вывод будет выглядеть примерно так:
list2 = [0, 5412, 0, 0, 0, 0, 1086, 0, 0, 5258]
Обратите внимание, что числа, длина списка и его распределение элементов могут различаться, например, список также может выглядеть как
list1 = [0, 0, 0, 0, 95472, 0, 0, 104538, 0, 0, 0, 0, 187649, 0, 0, 204841, 0, 0, 0, 0, 0, 0, 0, 0]
который должен превратиться в:
list2 = [0, 0, 0, 0, 0, 0, 0, 9066, 0, 0, 0, 0, 0, 0, 0, 17192, 0, 0, 0, 0, 0, 0, 0, 0]
Как видите, количество элементов остается одинаковым для list1 и list2. Кроме того, всегда есть четное количество «нулевых» значений и четное количество «ненулевых» значений. Помощь очень ценится!
То, что у меня есть:
from itertools import cycle, chain
list1 = [11545, 15334, 71341, 73861, 0, 0, 170374, 171671]
newlist = [list1[i + 1] - list1[i] for i in range(len(list1)-1)]
list2 = list(chain.from_iterable(zip(newlist[0::2], cycle([int()]))))
print list2
Выходной список печати2 выглядит так, как я себе представляю, но он не будет работать для списка, который выглядит как :
list1 = [16620, 22032, 0, 0, 0, 136813, 137899, 0, 199546, 204804]