python - 比较 2 个列表,同时迭代另一个列表 - Python

标签 python list networkx

我有一个列表source,它表示网络图中的节点。我迭代 source 中的节点来获取相邻节点的子列表。同时,所有相邻节点都会与另一个列表 watch_list 进行比较。

我想创建一个单独的列表adjacent,指定source中的节点是否在watch_list中具有邻居。请参阅下面的代码:

import networkx as nx
import pandas as pd

source = ['A','C','B','D','G','C','B','G']
target = ['B','T','G','A','T','B','H','V']
weight = [2, 1, 6, 6, 3, 3, 2, 1]
watch_list = ['H','D','T']

df = pd.DataFrame([source,target,weight])
df = df.transpose()
df.columns = ['source','target','weight']
G = nx.from_pandas_edgelist(df,'source','target','weight') 

adjacent = []
for i in source:
    for j in list(nx.all_neighbors(G, i)):
        if j in watch_list:
            adjacent.append('Y')
        else: adjacent.append('N') 

print(adjacent)

运行此代码将返回以下列表:

>>> ['N', 'Y', 'Y', 'N', 'N', 'N', 'N', 'Y', 'N', 'N', 'Y', 'N', 'Y', 'N', 'N', 'N', 'N', 'Y', 'N', 'Y', 'N']

问题在于代码正在遍历所有邻居并在每次迭代中附加“Y”或“N”。

如何控制流程仅附加“Y”或“N”一次,指示 source 中的节点在 watch_list 上有一个邻居(' Y'),或不('N')。

这似乎是一个简单的流量控制问题,但我似乎无法正确回答。 任何建议表示赞赏!

最佳答案

您可以使用any()并检查您的 watch_list 中是否有任何邻居:

adjacent = []
for i in source:
    if any(x in watch_list for x in list(nx.all_neighbors(G, i))):
        adjacent.append('Y')
    else: 
        adjacent.append('N') 

print(adjacent)

结果:

['Y', 'Y', 'Y', 'N', 'Y', 'Y', 'Y', 'Y']

关于python - 比较 2 个列表,同时迭代另一个列表 - Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51693024/

相关文章:

python - 我应该如何使用 GEKKO 为 log 或 sqrt 建模?约束条件

python - 构建 kivy 应用程序时出错 : ModuleNotFoundError: No module named 'typing_extensions'

python - 无法从子进程解析 xml。Python 中的 Popen 输出

list - 在 Haskell 中合并两个列表

python - 如何在粗线上获得非圆形箭头?

python - 为什么这个 genexp 的表现比列表理解差?

Java:从 HashMap<String, List<String>> 中的给定键返回随机值

javascript - 使下拉列表依赖于 PHP 中的另一个列表

python - 删除入度和出度都等于 1 的 networkx DiGraph 中的所有节点

python - Networkx如何获取多向图中特定边的长度