【发布时间】:2019-01-09 08:07:21
【问题描述】:
我对 Python 比较陌生。我用 Python (3.x) 编写了这段代码来解决一个涉及无向图的问题。
程序的预期输出应该打印在相邻节点列表中出现在 kth 位置的节点,这些节点按降序排序(基于节点的值),但是如果两个值相同,则打印按索引升序排序时首先出现的节点。
如果不存在这样的节点,则打印 -1。
n, m, k = input().strip().split(' ')
n, m, k = [int(n), int(m), int(k)]
node_values = list(map(int, input().split(' ')))
d = {}
for i in range(n+1):
d[i] = []
for i in range(m):
x, y = input().strip().split(' ')
x, y = [int(x), int(y)]
d[x].append(y)
d[y].append(x)
for key, value in d.items():
if key != 0:
if k <= len(value):
new_list = sorted(value, key=lambda x: node_values[x-1], reverse=True)
print(new_list[k-1])
else:
print(-1)
在这里,我使用sort() 进行排序,提供来自node_values 的值作为键。但我对添加第二个条件感到困惑(如果值相同,则根据索引的升序对它们进行排序)。
我在这里做错了什么?另外,使用并行列表来表示图形而不是使用字典是更好的选择吗?
【问题讨论】:
标签: python-3.x algorithm sorting graph