小编Hir*_*chi的帖子

计算列表的累积总和,直到出现零

我有一个(长)列表,其中0和1随机出现:

list_a = [1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1]
Run Code Online (Sandbox Code Playgroud)

我想得到list_b

我可以按如下方式实现:

list_b = []
for i, x in enumerate(list_a):
    if x == 0:
        list_b.append(x)
    else:
        sum_value = 0
        for j in list_a[i::-1]:
            if j != 0:
                sum_value += j
            else:
                break
        list_b.append(sum_value)
print(list_b)
Run Code Online (Sandbox Code Playgroud)

但实际列表的长度很长.

所以,我想改进高速代码.(如果不可读)

我改变了这样的代码:

from itertools import takewhile
list_c = [sum(takewhile(lambda x: x != 0, list_a[i::-1])) …
Run Code Online (Sandbox Code Playgroud)

python binary performance list cumsum

22
推荐指数
4
解决办法
3958
查看次数

Python:如何在列表理解中引用自己?

lsit_a = [2, 4, 3, 6, 3, 8, 5]
Run Code Online (Sandbox Code Playgroud)

列表理解非常有用。

list_b = [a**2 for a in list_a]
Run Code Online (Sandbox Code Playgroud)

我想知道如何在python列表理解中编写自引用。

例如 -

list_c = [a**2 if i == 0 else a*2 + (itself[i-1]) for i, a in enumurate(list_a)]
Run Code Online (Sandbox Code Playgroud)

怎么写的一部分itself[i-1]

对不起,我的解释不好。

我想通过高速方式获得这份清单。

输入清单

list_a = [0,0,1,0,0,0,1,0,0,1,0]

输出清单

list_c = [0,0,1,0.9,0.8,0.7,1,0.9,0.8,1,0.9]

就像锯齿列表。

python list-comprehension self-reference

2
推荐指数
1
解决办法
2389
查看次数