Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 元素不等于零的列表计算_Python_List_Calculation - Fatal编程技术网

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的澄清。这正是我想要的!非常感谢!我永远不会猜到这段代码,尽管它看起来很简单:-)