NetworkX中按节点度排序节点的更优实现方法咨询
更简洁的NetworkX节点按度数排序方法
嘿,完全懂你觉得那个列表推导有点啰嗦的感受!在NetworkX的新版本中,DegreeView确实不再支持旧版的.values()调用了,但咱们有几个更清爽的实现方式,不用先手动转成列表:
1. 直接对DegreeView排序(节点+度数对)
其实G.degree()返回的DegreeView本身就是可迭代对象,你可以直接把它传给sorted(),省去中间的列表推导步骤:
sorted(G.degree(), key=lambda x: x[1], reverse=True)
这个写法和你原来的逻辑完全一致,但更简洁——sorted会自动迭代DegreeView里的每个(node, degree)元组,按度数倒序排列。
2. 仅排序节点(不需要度数值)
如果你的需求只是得到按度数排序的节点列表,不用附带度数,那可以直接基于节点集合排序,把每个节点的度数作为排序key:
sorted(G.nodes(), key=lambda node: G.degree(node), reverse=True)
这个写法更直观,直接针对节点操作,省去了处理元组的步骤。
3. 排序唯一度数集合(替代旧版sorted(set(G.degree().values())))
如果你只是想得到排序后的唯一度数值集合,用生成器表达式提取度数就行,比先转列表再去重更高效:
sorted({degree for _, degree in G.degree()}) # 或者更直白的写法: sorted(set(degree for _, degree in G.degree()))
两种写法都能得到和旧版代码一样的结果,而且适配新版本NetworkX。
根据你的具体需求选对应的方法就行,比原来的列表推导简洁不少~
内容的提问来源于stack exchange,提问作者famargar
相关产品推荐
相关产品推荐

