我有我的Graph类:
class Graph:
V = set([])
E = {}
def add_vertex(self, u):
self.V.add(u)
self.E[u] = []
def add_edge(self, u, v):
if u not in self.V:
self.add_vertex(u)
if v not in self.V:
self.add_vertex(v)
self.E[u].append(v)
self.E[v].append(u)
def add_clique(self, *Q):
for u, v in Q:
self.add_edge(u, v)函数add_clique必须接受任意数量的元素,可以是单独的,也可以是列表的形式,并将它们作为一个集团(完整的子图)添加到图中。
因此,下面给出的代码应该可以工作:
G = Graph()
G.add_clique(1,2,3,4)
list = [5,6,7,8,9]
G.add_clique(*list)
G.add_clique(*[13,14,19,21])但是,我不能成对遍历列表或参数集合。当我执行这段代码时:
G = Graph()
G.add_clique(5, 6, 7, 8)我得到了这个错误:
Traceback (most recent call last):
File "D:/PycharmProjects/disks/main.py", line 63, in <module>
G.add_clique(5, 6, 7, 8)
File "D:/PycharmProjects/disks/main.py", line 21, in add_clique
for u, v in Q:
TypeError: cannot unpack non-iterable int object这样做的正确方法是什么?
发布于 2019-07-02 23:34:20
基本上,add_clique中的for循环试图从Q的每个项目中读取2个项目。for u, v in Q将每个项目解包为两个变量,只有当每个元素都是2元组时才有效。您可以通过在python shell中运行以下命令来重现这段代码
>>> for u, v in (1, 2, 3, 4):
... pass对于您的子图用例,请查看itertools.combinations以获取节点列表的所有2元组。代码可以像下面这样简单:
for u, v in itertools.combinations(Q, 2):
self.add_edge(u, v)https://stackoverflow.com/questions/56854882
复制相似问题