{'a': [{'c','d'}, {'d'} ],
'b': [{'c','d'}, set() ],
'c': [set(), {'a','b','d'}],
'd': [{'a','c'}, {'a','b'} ],
'e': [set(), set() ]}
class Graph:
def __init__(self,*args):
self.edges = {}
def degree(self,n):
count = 0
if n not in self.edges.keys():
raise GraphError
for key,value in self.edges.items():
if key == n:
for c in value:
for x in c:
count += 1
return count
def __iter__(self):
l=[]
for key,value in self.edges.items():
for item in value[0]:
l.append((key,item))
return sorted(l, key = degree(l[0]))
定义一条ITER方法使得每个呼叫到下一个产生一个值,该值是一个2元组repesenting在图中的边:源节点,接着它的目的地节点中的一个。原始节点按其度数递增的顺序生成(它们具有多少条边,即传入和传出)。而且,如果两个节点具有相同的学位,则应按字母顺序制作。每个源节点的目标节点应按字母顺序显示。例如,对上面的原始图进行迭代,按以下顺序产生6个值:('b','c'),('b','d'),('a','c'),(' a',d'),('d','a')和('d','c')。这是排序,因为节点b的等级为2,所以它和它的两个目标节点按字母顺序排列,是第一个;节点a的等级为3,所以它和它的两个目的节点按字母顺序出现,最后节点d具有度数4,所以它和它的两个目的地节点按字母顺序排列,是最后一个。如何修复__iter__函数
我在ITER功能工作,当它调用
g = Graph()
g.edges = {'a': [{'c','d'},{'d'}], 'b': [{'c','d'}, set()], 'c': [set(),{'a','b','d'}], 'd': [{'a','c'},{'a','b'}], 'e': [set(),set()]}
它应该返回
[t for t in g]-->[('b', 'c'), ('b', 'd'), ('a', 'c'), ('a', 'd'), ('d', 'a'), ('d', 'c')]
但是当我打电话给我ITER功能,它产生以下错误:
96 *Error: [t for t in g] raised exception TypeError: iter() returned non-iterator of type 'list'
99 *Error: [t for t in g] raised exception TypeError: iter() returned non-iterator of type 'list'
102 *Error: [t for t in g] raised exception TypeError: iter() returned non-iterator of type 'list'
有人可以帮助我解决我的iter功能吗?