- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这无疑是由于我缺乏 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
(set
和dict
),则顶点序列的每个属性都采用iterable
本身作为值,但如果您传递一个有序的可迭代对象(比如tuple
或list
),这些值将解压(不是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/
这无疑是由于我缺乏 Python 知识......但为什么这不适用于 igraph? import igraph g=igraph.Graph() verts = {'1','2','3'} g.ad
我是一名优秀的程序员,十分优秀!