Для данного графа g
я не могу изменить отдельные вершины Attribué (в данном случае 'color'
):Изменение indivual вершинных атрибутов питона igraph
from igraph import Graph
# create triangle graph
g = Graph.Full(3)
cl_blue = (0,0,.5)
cl_red = (.5,0,0)
g.vs['color'] = 3*[cl_blue]
g.vs['color'][0] = cl_red
после Поступая таким образом, print g.vs['color']
все еще дает
[(0, 0, 0.5), (0, 0, 0.5), (0, 0, 0.5)]
Как назначить значения для отдельных элементов?
Большое спасибо! Однако я не понимаю вашего полного объяснения. Если 'g.vs ['color']' возвращает только «копию, поэтому ее изменение не имеет никакого эффекта», то как я могу назначить ее «g.vs ['color'] = 3 * [cl_blue]' в приведенный выше пример? – flonk
ОК, я думаю, это не совсем верно ... объяснение требует немного больше. Когда вы вызываете 'g.vs ['color'] = 3 * [cl_blue]', это приводит к действительно вызову 'g.vs .__ setitem __ ('color', 3 * [cl_blue])', который VertexSequence может перевести в настройка атрибутов для всех узлов. 'g.vs ['color'] [0]' превращается в вызов 'g.vs .__ getitem __ ('color')', который возвращает список (копия), а затем '[0]' либо позволяет вы устанавливаете первый элемент в этом скопированном списке или уважаете его. –
Спасибо за ваше объяснение. Я не должен был недооценивать сложность '=', который магически называет '__setitem__'. – flonk