为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2023-02-07 11:09:57
我有一个名为 的列表dispatch,在该列表中,只要有一个正数就意味着充电,只要有一个负数就意味着放电。dispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]所以是 0,我开始在 中initial charge添加 的值,对此有上下限制。上限为50,下限为0。我为此编写的程序:dispatchinitial chargedispatch = [12,23,34,45,-23,-23,-12,23,34,-54,-54,-67]charge = 0soc = []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]谁能帮忙?
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

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


查看完整回答
反对 回复 2023-02-07
?
POPMUISE

TA贡献1765条经验 获得超5个赞

您正在从 中减去负值charge。于是,就变成了charge - (-value)。因为,我们知道 2 个负数形成一个正数。因此,它将添加两个值并选择它,因为它会大于 0。


...

    else:

        # Add i to charge

        charge = max(charge + i, 0)# lower restriction 0

        soc.append(charge)


查看完整回答
反对 回复 2023-02-07
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

也许试试这个:


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)


查看完整回答
反对 回复 2023-02-07
  • 3 回答
  • 0 关注
  • 84 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信