Python 有没有一种方法可以返回布尔值来查找节点及其组件是否已连接?

Python 有没有一种方法可以返回布尔值来查找节点及其组件是否已连接?,python,Python,所以这是为了理解,我试图编码一种方法来识别哪里有联系,有点像节点的社会。基本上,如果我输入一个矩阵和一个节点,如果给定的节点有已经相关的组件,它将返回True或False 我曾尝试使用while循环来循环访问的集合,但在这个过程中我仍然迷失了方向。就理解而言,我觉得使用for循环更舒服。如果有一种方法可以迭代子矩阵列表,以找到节点之间的关系,这将很容易理解和调整 def society(graph_matrix, node): for item in (graph_matrix):

所以这是为了理解,我试图编码一种方法来识别哪里有联系,有点像节点的社会。基本上,如果我输入一个矩阵和一个节点,如果给定的节点有已经相关的组件,它将返回True或False

我曾尝试使用while循环来循环访问的集合,但在这个过程中我仍然迷失了方向。就理解而言,我觉得使用for循环更舒服。如果有一种方法可以迭代子矩阵列表,以找到节点之间的关系,这将很容易理解和调整

def society(graph_matrix, node):

    for item in (graph_matrix):
        for j in item:
            if graph_matrix[item][j] and graph_matrix[item][node] and graph_matrix[j][node] == 1:
                return True
    return False


gmatrix =  [ [0,1,1,1,0],
             [1,0,0,1,0],
             [1,0,0,0,1],
             [1,1,0,0,0],
             [0,0,1,0,0] ]

因此,如果我输入
(society(gmatrix,0))
,答案应该返回
True
,当您查看节点0时,您可以看到它与节点1和节点3的连接,并且节点1与节点3连接,这可以在gmatrix矩阵中观察到。有点像一个由节点组成的社会。我是


但是,
society(gmatrix,2)
应该返回
False
,节点2连接到0,而节点4却没有连接到0和4。

我认为,将图形设置为矩阵形式会使您的思考变得比需要的更困难。将边缘连接列表转换为连接节点的列表将使事情变得更简单(并且,作为奖励,在
society()
返回
False
的情况下,减少计算负载,随着节点数量的增加,这一点更为重要):

def到_映射(gmatrix):
返回[[k表示k,v表示枚举(边)中的v]如果v表示gmatrix中的边]
然后你就能做到:

def协会(图形地图,节点):
对于图\映射[节点]中的n:
如果n==节点:
持续
对于图_映射[n]中的nn:
如果nn!=节点和nn!=图\映射[节点]中的n和nn:
返回真值
返回错误
例如:

gmatrix=[[0,1,1,1,0],
[1,0,0,1,0],
[1,0,0,0,1],
[1,1,0,0,0],
[0,0,1,0,0] ]
gmap=到_映射(gmatrix)
印刷(社会(gmap,0))#真实
印刷品(学会(gmap,2))#假

我认为,将图形设置为矩阵形式会使思考变得比实际需要更困难。将边缘连接列表转换为连接节点的列表将使事情变得更简单(并且,作为奖励,在
society()
返回
False
的情况下,减少计算负载,随着节点数量的增加,这一点更为重要):

def到_映射(gmatrix):
返回[[k表示k,v表示枚举(边)中的v]如果v表示gmatrix中的边]
然后你就能做到:

def协会(图形地图,节点):
对于图\映射[节点]中的n:
如果n==节点:
持续
对于图_映射[n]中的nn:
如果nn!=节点和nn!=图\映射[节点]中的n和nn:
返回真值
返回错误
例如:

gmatrix=[[0,1,1,1,0],
[1,0,0,1,0],
[1,0,0,0,1],
[1,1,0,0,0],
[0,0,1,0,0] ]
gmap=到_映射(gmatrix)
印刷(社会(gmap,0))#真实
印刷品(学会(gmap,2))#假

在您的代码中,
用于(图形矩阵)中的项:
,此处
表示一个数字列表。 您不能使用数字列表作为如下矩阵索引:
graph\u matrix[item][node]

据我所知,您想知道三个节点是否相互连接。为此,您可以通过以下方式修改代码:

def society(graph_matrix, node):
    for i in range(len(graph_matrix[node])):
        for j in range(len(graph_matrix[node])):
            if graph_matrix[node][i] and graph_matrix[node][j] and graph_matrix[i][j] == 1:
                return True
    return False


gmatrix =  [ [0,1,1,1,0],
             [1,0,0,1,0],
             [1,0,0,0,1],
             [1,1,0,0,0],
             [0,0,1,0,0] ]

print(society(gmatrix, 0));

这里,
len(graph\u matrix[node])
将返回
graph\u matrix[node]
长度,并且
范围(len(graph\u matrix[node])
将在代码中从0迭代到length-1
中的项:
,此处
表示一个数字列表。 您不能使用数字列表作为如下矩阵索引:
graph\u matrix[item][node]

据我所知,您想知道三个节点是否相互连接。为此,您可以通过以下方式修改代码:

def society(graph_matrix, node):
    for i in range(len(graph_matrix[node])):
        for j in range(len(graph_matrix[node])):
            if graph_matrix[node][i] and graph_matrix[node][j] and graph_matrix[i][j] == 1:
                return True
    return False


gmatrix =  [ [0,1,1,1,0],
             [1,0,0,1,0],
             [1,0,0,0,1],
             [1,1,0,0,0],
             [0,0,1,0,0] ]

print(society(gmatrix, 0));

这里,
len(graph\u matrix[node])
将返回
graph\u matrix[node]
长度,而
范围(len(graph\u matrix[node])
将从0迭代到length-1

如何找到每个节点之间的连接?如何找到每个节点之间的连接?