gpt4 book ai didi

python - 为什么 igraph 的 add_vertices() 不能处理一组字符串?

转载 作者:行者123 更新时间:2023-11-30 22:53:57 25 4
gpt4 key购买 nike

这无疑是由于我缺乏 Python 知识......但为什么这不适用于 igraph?

import igraph
g=igraph.Graph()
verts = {'1','2','3'}
g.add_vertices(verts)
for v in g.vs:
print v

输出:

igraph.Vertex(<igraph.Graph object at 0x106347908>,0,{'name': set(['1', '3', '2'])})
igraph.Vertex(<igraph.Graph object at 0x106347908>,1,{'name': set(['1', '3', '2'])})
igraph.Vertex(<igraph.Graph object at 0x106347908>,2,{'name': set(['1', '3', '2'])})

我期望得到以下输出(我使用 add_vertices(list(verts)) 获得):

igraph.Vertex(<igraph.Graph object at 0x106347af8>,0,{'name': '1'})
igraph.Vertex(<igraph.Graph object at 0x106347af8>,1,{'name': '3'})
igraph.Vertex(<igraph.Graph object at 0x106347af8>,2,{'name': '2'})

关于 add_vertices 的文档说,

add_vectirces(n)  n - the number of vertices to be added, or the name of a single vertex to be added, or an iterable of strings, each corresponding to the name of a vertex to be added. Names will be assigned to the name vertex attribute.

我认为verts是一个有效的字符串迭代。我的错误在哪里?

最佳答案

来自 igraph source :

def add_vertices(self, n): 
if isinstance(n, basestring):
# some code
elif hasattr(n, "__iter__"):
m = self.vcount()
if not hasattr(n, "__len__"):
names = list(n)
else:
names = n
result = GraphBase.add_vertices(self, len(names))
self.vs[m:]["name"] = names # assignment is done here
return result

将顶点序列切片中每个顶点的 name 属性分配给 names 中的值似乎是合理的——如果这是在纯 Python 中完成的,它会简单地作为解包传递——但是Graph类子类的GraphBase是用c编写的。

因此,行为只能通过结果来描述。如果您传递无序的iterable(setdict),则顶点序列的每个属性都采用iterable本身作为值,但如果您传递一个有序的可迭代对象(比如tuplelist),这些值将解压(不是Python意义上的)并且分配给 vs 的该片段。

您可以通过重复以下代码片段来确认这一点:

verts = ('1','2','3') # ordered

verts = {'1': 'one' ,'2': 'two', '3': 'three'} # unordered

但是卡住集

嗯,frozensets 也是不可下标的,因此 C 代码将简单地重复与 set 相同的行为。

I thought verts was a valid iterable of strings

但对于 Python 中的索引无效。我猜文档需要整容一下。

关于python - 为什么 igraph 的 add_vertices() 不能处理一组字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37989057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com