Python: как найти уникальные узлы между двумя сетями в Python 3? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть две сети G и G1, сгенерированные с помощью networkx.

Чтобы найти список, содержащий уникальные узлы между двумя сетями (т. Е. Пересечение), я запускаю в Python 2.7 следующая команда, которая отлично работает.

tmp2 =  list(set(G.nodes) & set(G1.nodes))

Та же команда на компьютере с Python 3 возвращает следующую ошибку:

TyperError: 'method' object is not iterable

Есть ли способ избежать этой ошибкив Python 3.x?

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

В networkx версии 1.x G.nodes - это метод, который возвращает узлы G.G.nodes() - это список узлов G.Итак, ваш вызов set(G.nodes) просит Python создать набор из метода.Это не может быть сделано.Это может сделать набор из узлов G.Так что set(G.nodes()) работает.

В версии 2.x G.nodes и G.nodes() оба являются NodeView объектами.Они работают во многом как списки (хотя есть различия).

Таким образом, ваша команда будет работать в самой последней версии networkx, но не в более старых версиях.Даже если вы переключитесь на использование 2.x, я рекомендую по-прежнему называть его G.nodes() в случае, если код когда-либо запускался в более ранней версии.

0 голосов
/ 08 июня 2018

Ошибка предполагает, что nodes - это метод в Python 3, поэтому код должен быть изменен на list(set(G.nodes()) & set(G1.nodes())) для его фактического вызова.

...