Python 元素不等于零的列表计算
让我们假设我有一个列表:Python 元素不等于零的列表计算,python,list,calculation,Python,List,Calculation,让我们假设我有一个列表: 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 = [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]
复制,但调整非零值,跟踪上一个值
list2 = []
prev = None
for curr in list1:
if curr:
if prev:
curr -= prev
prev = None
else:
prev = curr
curr = 0
list2.append(curr)
帮什么忙?您尚未发布任何代码来帮助您。请详细说明如何将
list1
转换为list2
。我已添加了迄今为止获得的代码,但仅适用于特定顺序的列表。您的解释与所需的输出不一致。您说您想要“一个新的列表,它从上一个值中减去不等于零的第二个值”,但在示例list1=[16620,22032,…
,不等于零的第二个值是22032
,如果从上一个值16620
中减去该值,则应得到-5412
,但您所需的输出为5412
(非负)。请澄清。@HeapOverflow我们不知道哪一个是正确的——解释还是示例输出,所以我想我们需要OP的澄清。这正是我想要的!非常感谢!我永远不会猜到这段代码,尽管它看起来很简单:-)