如果我在下面的解释很糟糕,我深表歉意,但我对 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/