【发布时间】:2018-01-22 02:55:36
【问题描述】:
我有一长串按顺序遍历的状态。 遍历状态意味着生成一个新状态,作为现有状态的替代。 经过少量的遍历,我得出要么成功要么失败的结论。 如果成功,那么我的新列表是列表顶部的已修改状态,并且所有未遍历的元素均未更改。 如果我得出失败的结论,我只返回原始列表。也就是说,我通过丢弃更改来“撤消”。
可以通过将我的新状态列表与原始列表的一部分连接起来来完成成功案例。但是,如果我理解正确,切片会做浅拷贝。对于一长串清单来说,这似乎是不必要的成本。如果我有一个链表,我想我可以以非常低的成本做到这一点。
我应该在 python 中将其实现为链表吗? [因为如果列表需要修改,列表头部的元素可以简单地通过更改指针添加到未修改的尾部,无需 O(N) 复制列表,这是 Python 列表无法避免的]
编辑 迭代器似乎是一个很好的 Python 解决方案。请看下面我的回答。 显然,这个要求是'retroactive data structure'
【问题讨论】:
-
一个普通的列表可以吗?
-
列表切片不是“浅拷贝”
-
@donkopotamus,哦,我还以为是:stackoverflow.com/a/19068714/4834
-
@quamrana 列表切片可能是列表的“浅拷贝”,但其中的项目不是原始列表中项目的“浅拷贝”,这似乎是 OP 的担心(否则他们没有理由认为创建一个新的链表会更便宜)
-
哦,我认为 OP 关心的是生成切片,例如。
oldlist[n:]其中len(oldlist) >> n会很贵。
标签: python list data-structures