使用 .add 将数组添加到列表时"TypeError: unhashable type: 'list'"。有什么解决方法吗?(蟒蛇)



我正在尝试实现广度优先搜索;类型错误:不可处理的类型:"list"在visited.add(state(命令上。initState输入是一个数字数组([2,2,0,0,1](,future_State((的返回值是一个相同格式的数组列表。你对如何解决这个问题有什么想法吗?

一些研究指出了散列((方法,但我无法使其工作:/

def BFS(initState):
initState = currentState
if isGoal(initState) :
return initState
visited = set()
queue = [initState]
while queue:
state = queue.pop()
if isGoal(state) == True:
return state
visited.add(state)
for child in future_State(state):
if child in visited:
continue
if child not in queue:
queue.append(child)

Python中的集合是用哈希表实现的。您得到的错误消息意味着您不能将列表添加到集合中,因为无法为该类型的变量(列表(计算哈希键。如果您想将状态的值添加到访问的数组中,您可以执行并集:

visited = visited.union(state)

否则,如果您希望集合中的每个元素都是一个列表,则应该为访问过的使用列表,而不是集合,并实现解决方案以避免重复。

最新更新