use*_*111 22 python set python-2.7 python-3.x
下面的代码在函数U = set(p.enum())中有一个错误,其中一个类型错误是不可用类型:'set'实际上如果你可以看到类方法枚举返回'L'这是集合的列表和函数中的U应该是一个集合,所以请你帮我解决问题或者如何将集合列表转换为集合?
class pattern(object):
def __init__(self,node,sets,cnt):
self.node=node
self.sets=sets
self.cnt=cnt
def enum(self):
L=[]
if self.cnt==1:
L = self.node
else:
for i in self.sets:
L=[]
for j in self.node:
if i!=j:
L.append(set([i])|set([j]))
return L #List of sets
V=set([1,2,3,4])
U=set()
cnt=1
for j in V:
p=pattern(V,(U|set([j])),cnt)
U=set(p.enum()) #type error Unhashable type:'set'
print U
cnt+=1
Run Code Online (Sandbox Code Playgroud)
Amb*_*ber 27
您放入集合中的各个项目不可变,因为如果它们发生更改,则有效散列会发生变化,因此检查包含的能力会中断.
相反,您需要将不可变对象放入集合中 - 例如frozenset
s.
如果将return语句从enum
方法更改为...
return [frozenset(i) for i in L]
Run Code Online (Sandbox Code Playgroud)
......然后它应该工作.
引发此错误是因为set只能包含不可变类型.或者集合是可变的.但是有frozenset
类型:
In [4]: a, b = {1,2,3}, {2,3,4}
In [5]: set([a,b])
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-5-6ca6d80d679c> in <module>()
----> 1 set([a,b])
TypeError: unhashable type: 'set'
In [6]: a, b = frozenset({1,2,3}), frozenset({2,3,4})
In [7]: set([a,b])
Out[7]: {frozenset({1, 2, 3}), frozenset({2, 3, 4})}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49858 次 |
最近记录: |