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

我有一个名为 的列表dispatch,在该列表中,只要有一个正数就意味着充电,只要有一个负数就意味着放电。


dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]

所以是 0,我开始在 中initial charge添加 的值,对此有上下限制。上限为50,下限为0。我为此编写的程序:dispatchinitial charge


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]

谁能帮忙?


慕运维8079593
浏览 91回答 3
3回答

慕勒3428872

使用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]

POPMUISE

您正在从 中减去负值charge。于是,就变成了charge - (-value)。因为,我们知道 2 个负数形成一个正数。因此,它将添加两个值并选择它,因为它会大于 0。...    else:        # Add i to charge        charge = max(charge + i, 0)# lower restriction 0        soc.append(charge)

一只萌萌小番薯

也许试试这个:dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]charge = 0soc = []for i in dispatch:    charge = min(charge + i, 50) if i > 0 else 0    soc.append(charge)print(soc)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python