存储数组并检查它们是否存在于Python中的有效方法

2024-04-25 21:53:59 发布

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

我正在尝试为tic-tac-toe制作一个基于视觉的强化学习机器人,并一直在研究如何快速保存和检索数据。你知道吗

因此,将数据保存为列表例如,起始点是[0, 0, 0, 0, 0, 0, 0, 0, 0],而该[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]的起始策略。你知道吗

问题是: 我应该以什么格式保存当前状态和策略,以便快速访问它以检查状态是否已存在并更新策略?我在想pandaspickle,但发现用列表实现有点困难。你知道吗


Tags: 数据pandas列表状态格式机器人视觉tic
1条回答
网友
1楼 · 发布于 2024-04-25 21:53:59

您需要的似乎是散列,标准Python类setdictionary使用散列。但是,您需要存储的对象list是不可散列的,因此不能直接用于这些容器中。你知道吗

哈希表为访问提供了O(1)复杂性,这是定期检查所需的。但是需要散列的数据类型带来了一些困难,在这里如何克服这些困难。你知道吗

1-您可以将列表转换为元组,然后将其存储在集合或字典中(如果您还想为键指定一些值)。这需要O(n)到tuple的转换。请注意,您不能更改元组,您应该完全替换它(这就是为什么它是可哈希的,而list不是)。你知道吗

all_states = set()
state = tuple([0, 0, 0, 0, 0, 0, 0, 0, 0])
all_states.add(state)

2-如果您想坚持使用列表,我想创建一个包装类,然后哈希应该可以工作,但不能保证此方法是一种建议的python方法。你知道吗

class State:
    def __init__(self, contents):
        self.contents = contents

one_state = State([1, 2, 3])
hash(one_state) # Now it is hashable, just for checking.
                # If you can add it to a set, it is hashable.
all_states.add(state)

相关问题 更多 >

    热门问题