python - 从列表中的每个值中减去动态值

标签 python

如果我在下面的解释很糟糕,我深表歉意,但我对 python 脚本编写还很陌生。

我正在尝试找到一种生成数字列表的方法,该列表从列表中的项目中减去 set_value,然后获取 new_value 并将其从列表中的下一项中减去,依此类推。

例如:

subtraction_list = []
set_value = 100
lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
set_value - list[0] = 99
new_set_value = 99
new_set_value - list[1] = 98
...
subtraction_list = [99, 97, 94, 90, 85, 79, 72, 64, 55, 45]

无论如何,我们将不胜感激!

最佳答案

您可以利用 itertools.accumulate 以实用的方式执行此操作使迭代器产生列表的累积总和。

它的工作原理是这样的:

from itertools import accumulate

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
m = accumulate([0] + l)  # in 3.8 we can use accumulate(l, initial = 0)

list(m)
# [0, 1, 3, 6, 10, 15, 21, 28, 36, 45, 55]

您可以将其与您的值一起压缩并将其用作减法的一部分,从而避免显式管理变量的状态:

from itertools import accumulate

set_value = 100

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
m = accumulate([0]+l)

subtraction_list = [set_value - diff - n for diff, n in zip(m, l)]
# [99, 97, 94, 90, 85, 79, 72, 64, 55, 45]

对于完全不同的东西——如果你使用的是 python 3.8,你可以在这里使用 walrus := 运算符:

l = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
set_value  = 100
subtraction_list = [set_value := set_value - n for n in l]

[注意:不要使用 list 作为变量名。 list是 python 中的内置类型,您可以覆盖它,这会导致难以发现的错误。]

关于python - 从列表中的每个值中减去动态值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63146148/

相关文章:

python - def __init__(self, *args, **kwargs) 在 python 中初始化类

python - 使用 numpy 从卷中提取并保存切片

python - 无法确定导致 Flask Werkzeug BuildError 的原因

python - 通过梯度下降在每一步更新的自定义损失函数

Python:为什么导入的模块不能引用另一个导入的模块?

python - Numpy 2D 数组沿特定轴由其他 2D 索引

python - 使用 sqlalchemy (ORM) 进行外连接

python - 使用 PIL/Image 保存 .tif 堆栈

python - 使用 Python 包装的 C++ 类进行并行计算 : performing operations in every element of a vector

python - 将具有多列的数据框 reshape 为行组