首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想将一个集团作为子图添加到我的图中

我想将一个集团作为子图添加到我的图中
EN

Stack Overflow用户
提问于 2019-07-02 22:38:55
回答 1查看 25关注 0票数 0

我有我的Graph类:

代码语言:javascript
复制
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必须接受任意数量的元素,可以是单独的,也可以是列表的形式,并将它们作为一个集团(完整的子图)添加到图中。

因此,下面给出的代码应该可以工作:

代码语言:javascript
复制
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])

但是,我不能成对遍历列表或参数集合。当我执行这段代码时:

代码语言:javascript
复制
G = Graph()
G.add_clique(5, 6, 7, 8)

我得到了这个错误:

代码语言:javascript
复制
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

这样做的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2019-07-02 23:34:20

基本上,add_clique中的for循环试图从Q的每个项目中读取2个项目。for u, v in Q将每个项目解包为两个变量,只有当每个元素都是2元组时才有效。您可以通过在python shell中运行以下命令来重现这段代码

代码语言:javascript
复制
>>> for u, v in (1, 2, 3, 4):
...   pass

对于您的子图用例,请查看itertools.combinations以获取节点列表的所有2元组。代码可以像下面这样简单:

代码语言:javascript
复制
for u, v in itertools.combinations(Q, 2):
    self.add_edge(u, v)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56854882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档