这是python中真正的链表应用程序吗?

2024-04-26 00:32:22 发布

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

我有一长串的状态,它们是按顺序遍历的。 遍历一个状态意味着生成一个新状态,作为现有状态的替换。 经过少量的遍历,我得出结论要么成功要么失败。 如果成功,那么我的新列表是列表顶部的修改状态,而所有未遍历的元素不变。 如果我认为失败了,我只返回原来的列表。也就是说,我通过丢弃更改来“撤消”。你知道吗

成功的例子可以通过将我的新状态列表与原始列表的一部分连接起来来完成。但是,如果我理解正确的话,切片会做浅拷贝。这似乎是一个不必要的费用为一长串。如果我有一个链表,我想我可以以非常低的成本做到这一点。你知道吗

我应该在python中将其实现为链表吗?[因为如果需要修改列表,可以通过更改指针将列表头部的元素简单地添加到未修改的尾部,而不必复制列表,这在Python列表中是不可避免的]

编辑 迭代器似乎是一个很好的Python解决方案。请看下面我的答案。 显然,这个要求是一个retroactive data structure


Tags: 元素列表顺序状态切片中将例子费用
2条回答

如果您希望只遍历少数项,那么一旦知道结果,就可以将新项覆盖到旧列表上。你知道吗

def traverse_states(states):
    new_list = []
    for state in states:
        new_state, result = traverse(state) # result is in [None, True, False]
        new_list.append(new_state)
        if result is not None:
            if result == True:
                for index, new_state in enumerate(new_list):
                    states[index] = new_state
            return

用法:

some_states = create_states() # returns list of states

traverse_states(some_states)

some_states是原始列表或替换了前几个项的同一列表。你知道吗

假设iter()的成本很便宜,我认为这段代码在python中显示了一个很好的解决方案。你知道吗

import itertools
from random import randint

original_iterator = range(0, 99)
processing_iterator = iter(original_iterator)
outcome = 'Failure'

l2 = []
for i in processing_iterator:
    l2.append('a')  # change the state
    random_event = randint(0, 9)
    if random_event == 1:  # success
        result_list = itertools.chain(l2, processing_iterator)
        outcome = 'Success'
        break
    elif random_event == 2:  # failure
        result_list = original_iterator
        break
else:  # failure by exhaustion
    result_list = original_iterator  

print("Result", outcome, (list(result_list)))

相关问题 更多 >