我在程序中收到以下错误: 回溯:
Traceback (most recent call last):
File "C:\Python33\Archive\PythonGrafos\Alpha.py", line 126, in <module>
menugrafos()
File "C:\Python33\Archive\PythonGrafos\Alpha.py", line 97, in menugrafos
zetta = Beta.caminhografo(grafo,va,vb)
File "C:\Python33\Archive\PythonGrafos\Beta.py", line 129, in caminhografo
if ([vo, a]) in vat == ([vo,vq]) in vat:
TypeError: unhashable type: 'list'
程序的目的是做一个邻接列表,工作良好,然后继续搜索是否有一个顶点之间的va和vb的路径。我在collection/defaultdict中使用了一个列表字典,因此可以正确地附加相邻顶点。
问题出在程序末尾创建列表后的if子句中。我找不到一种方法来正确使用if子句和dict来查找顶点之间是否存在有效路径。grafo也是一个图类。
代码如下:
class graph:
v = 0
a = 0
node = []
class vertex:
ta = []
adj = {}
def caminhografo(grafo, va, vb):
vat = defaultdict(list)
i = 0
a = 0
z = 0
vo = int(va)
vq = int(vb)
vz = int(va)
vw = int(vb)
x = len(grafo.node)
if vz < vw:
for vz in range (vw+1):
a = 0
x = len(grafo.node)
for a in range (x):
if [int(vz),int(a)] in grafo.node:
vat[vz].append(a)
if vz > vw:
while vz > vw:
a = 0
x = len(grafo.node)
for a in range (x):
if[int(va),int(a)] in grafo.node:
vat[vz].append(a)
vz = vz - 1
a = 0
x = len(grafo.node)
print(vat)
for a in range (x):
if ([vo, a]) in vat == ([vo,vq]) in vat:
print("""
==============================================
Existe Caminho
==============================================
""")
break
elif ([vo,a]) in vat:
vo = a
else:
print("""
==============================================
Não Existe Caminho
==============================================
""")
break
谢谢你的帮助。
问题是不能使用
list
作为dict
中的键,因为dict
键需要是不可变的。改用元组。这是一个列表:
这是一个元组:
注意,在大多数情况下,
(
和)
是可选的,因为,
实际上定义了元组(只要它不被[]
或{}
包围,或用作函数参数)。您可能会发现the section on tuples in the Python tutorial很有用:
在dictionaries部分:
如果您想知道错误消息是什么意思,那么它是在抱怨,因为列表(按设计)没有内置的hash function,而字典是作为hash tables实现的。
相关问题 更多 >
编程相关推荐