Python不是用于在List中搜索不起作用

时间:2017-04-24 10:44:31

标签: python list search

我正在尝试从给定的图形创建另一个具有互斥边缘的图形。

我从原始图形中随机绘制节点并检查它是否已存在于原始图形中。 not in命令未按预期工作。

我的代码正在关注。

import networkx as nx
import numpy as np
import random
G=nx.karate_club_graph()
K=nx.Graph()
sample_len=len(G.edges())
while(len(K.edges())<sample_len):
    n1=random.choice(G.nodes())
    n2=random.choice(G.nodes())
    e=(n1,n2)
    if(e not in G.edges()):
        K.add_edge(*e)
i=0
for x in G.edges():
    if(x in K.edges()):
        i+=1
print i

每次运行此代码时,i的值都在5-10之间。

2 个答案:

答案 0 :(得分:1)

使用Graph.has_edge()

import networkx as nx
import numpy as np
import random
G=nx.karate_club_graph()
K=nx.Graph()
sample_len=len(G.edges())
while(len(K.edges())<sample_len):
    n1=random.choice(G.nodes())
    n2=random.choice(G.nodes())
    e=(n1,n2)
    if(not G.has_edge(*e)):
        K.add_edge(*e)
i=0
for x in G.edges():
    if(K.has_edge(*x)):
        i+=1
print(i)

问题可能是因为networkx以不同的方式存储边缘。对于无向图,(n1, n2)(n2, n1)有效。因此,以下检查也可以解决您的问题,但显然比使用has_edge()更加冗长:

if((n1, n2) not in G.edges() and (n2, n1) not in G.edges()):
    K.add_edge(n1, n2)

答案 1 :(得分:0)

如果您想要通过这种方式实现差异:

print (list(set(G.edges()) - set(K.edges())))

如果您只想要一个数字,请添加len

print (len(list(set(G.edges()) - set(K.edges()))))

请告诉我这是否是您要存档的内容;)