Python 如何根据列表元素限制加法和减法?

Python 如何根据列表元素限制加法和减法?,python,list,Python,List,我有一个名为调度的列表,每当有一个正数表示充电,每当有一个负数表示放电时,列表中都有 dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67] 因此,初始费用为0,我开始在初始费用中添加调度的值,这有上下限制。上限为50,下限为0。 我为此编写的程序: dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67] charge = 0 soc = [] for i in dispatch:

我有一个名为
调度
的列表,每当有一个正数表示充电,每当有一个负数表示放电时,列表中都有

dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]
因此,
初始费用
为0,我开始在
初始费用
中添加
调度
的值,这有上下限制。上限为50,下限为0。 我为此编写的程序:

dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]
charge = 0
soc = []
for i in dispatch:
    if i > 0:
        charge = min(charge + i, 50)# upper restriction 50
        soc.append(charge)
    else:
        charge = max(charge - i, 0)# lower restriction 0
        soc.append(charge)
print(soc)
输出:

[12, 35, 50, 50, 73, 96, 108, 50, 50, 104, 158, 225]
但这是错误的。 我的预期产出是:

[12, 35, 50, 50, 27, 4, 0, 23, 50, 0, 0, 0]

有人能帮忙吗?

您正在从
费用中减去负值。因此,它变成了
电荷-(-value)
。正如我们所知,两个负数构成一个正数。因此,它将两个值相加并选择它,因为它将大于0

。。。
其他:
#加收费用
电荷=最大值(电荷+i,0)#下限0
soc.附加(费用)

混合使用
max
min

soc = [0]
for i in dispatch:
    soc.append(min(max(soc[-1] + i, 0), 50))
soc = soc[1:]
print(soc)
输出:

[12, 35, 50, 50, 27, 4, 0, 23, 50, 0, 0, 0]
试试这个,也许:

dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]
charge = 0
soc = []
for i in dispatch:
    charge = min(charge + i, 50) if i > 0 else 0
    soc.append(charge)
print(soc)

为什么第五个值应该是
7
?这似乎很随意。无论是
50-23
还是
50+23
都不会导致7我认为您需要在else部分写入
charge=max(charge+i,0)
。是的,我已经更正了预期输出,即使更改了else条件,我也不会得到解决方案。我认为这仍然不会给出OP的预期输出