我有一个列表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/