元素不为零的列表计算
List calculation with elements not equal to zero
假设我有一个列表:
list1 = [16620, 22032, 0, 0, 0, 136813, 137899, 0, 199546, 204804]
我正在寻找一个新列表,它从以下 'non-zero' 值中减去每个 'non-zero' 值,例如22032-16620、137899-136813。 'Zero' 值将保持不变。
除此之外,减去的 'non-zero' 值应该变为零。
输出看起来像:
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 的元素数量保持不变。此外,总是有偶数个 'zero' 值和偶数个 'non-zero' 值。
非常感谢您的帮助!
我目前拥有的:
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
输出 print list2 看起来像我想象的那样,但它不适用于如下所示的列表:
list1 = [16620, 22032, 0, 0, 0, 136813, 137899, 0, 199546, 204804]
复制过来,但调整非零值,跟踪前一个值。
list2 = []
prev = None
for curr in list1:
if curr:
if prev:
curr -= prev
prev = None
else:
prev = curr
curr = 0
list2.append(curr)
假设我有一个列表:
list1 = [16620, 22032, 0, 0, 0, 136813, 137899, 0, 199546, 204804]
我正在寻找一个新列表,它从以下 'non-zero' 值中减去每个 'non-zero' 值,例如22032-16620、137899-136813。 'Zero' 值将保持不变。 除此之外,减去的 'non-zero' 值应该变为零。 输出看起来像:
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 的元素数量保持不变。此外,总是有偶数个 'zero' 值和偶数个 'non-zero' 值。 非常感谢您的帮助!
我目前拥有的:
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
输出 print list2 看起来像我想象的那样,但它不适用于如下所示的列表:
list1 = [16620, 22032, 0, 0, 0, 136813, 137899, 0, 199546, 204804]
复制过来,但调整非零值,跟踪前一个值。
list2 = []
prev = None
for curr in list1:
if curr:
if prev:
curr -= prev
prev = None
else:
prev = curr
curr = 0
list2.append(curr)