如何实现撤消修改列表的最后一个输入的函数?

2024-05-15 13:53:32 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,我最近制作了一个程序,可以添加、删除(或者只是简单地删除,或者通过用户输入[即,如果一个项目少于用户输入,那么它就会被删除等等])并修改列表中的包(包含开始和结束日期、目的地和价格的字典)

当我实现移除/修改函数时,我还确保将原始项附加到新列表中,这样当我必须调用撤销函数时,它只需将原始项再次附加到原始列表中,函数只删除在remove/modify调用后列表中的项,并追加已删除/修改的项

我试图做的(我的思路)是,我想创建一个名为“lst”的新列表,在其中存储即将删除的项目,我基本上会在undo函数中使用它(基本上是您称之为undo list的函数)。在undo函数中,我通过l和lst枚举,并尝试从lst列表中追加该项。现在我看到了我是如何搞砸了,因为索引可能会不一样,我抓到了一个索引器,所以我求助于弹出前一项

代码:https://pastebin.com/taZAjhQf 我刚才提到的功能:

def undo(l,lst):
    for el,pachet in enumerate(l):
        l.append(lst[el])
        l.pop()

如果你至少能给我一个提示或者告诉我我是否在正确的轨道上


Tags: 项目函数用户程序列表字典价格el
1条回答
网友
1楼 · 发布于 2024-05-15 13:53:32

我的建议是保存一份已发生业务的日志(类似于会计师记账)。这样,您存储的是发生的操作,而不是实际状态。通过跟踪日志并按顺序应用日志中的操作,可以构造最终状态。对于撤消操作,您可以弹出最后一个操作并重建状态(我将留给您考虑如何优化该操作)

这种技术现在相当流行,尤其是在使用卡夫卡的系统中。关于这项技术的更多想法,你可以看看Jay Kreps的这个free ebook,还有一个不错的article

相关问题 更多 >