繁体   English   中英

如何从元组列表的第二项中获取最小的项?

[英]How to get the smallest item from the second items of a tuple list?

首先对令人困惑的标题感到抱歉,我不知道如何在没有示例的情况下解释我的问题。

我有以下图表

graph = {
    1: [(3, 5), (4, 1),  (5, 4)],
    2: [(5, 9)],
    3: [(5, 1), (6, 1)],
    4: [(2, 11), (8, 2)],
    5: [(4, 6), (2, 6)],
    6: [(7, 1)],
    7: [(5, 7), (2, 1)],
    8: [(2, 6)],
}

我希望能够从给定数字的元组的第二项中获得最小的数字。 例如,如果我给 function 提供数字 1,我希望它从第二个元组返回 1。 如果输入是 4,我希望它从第二个元组返回 2。

我目前的方法是min((graph[s])[1]) ,但这并没有真正起作用,并且主要返回索引错误。

编辑:我现在用(min(graph[s])[0], min(graph[s])[1])[1]解决了问题(由于某种原因)它在所有情况下都有效(问题出在列表上只包含一个元组)。

只需使用:

s = 7
print(min(min(graph[s], key= lambda t:min(t))))

当处理像2: [(5, 9)]这样有 juse 1 项的配对时,您的问题就出现了,当访问[1]时,这将失败,您必须先检查长度

def get_min(graph, key, position=1):
    values = graph[key]
    if len(values) > position:
      return min(values[position])
    return -1


graph = {1: [(3, 5), (4, 1), (5, 4)],2:[(5, 9)],3: [(5, 1), (6, 1)],4: [(2, 11), (8, 2)],
         5: [(4, 6), (2, 6)],6: [(7, 1)],7: [(5, 7), (2, 1)],8: [(2, 6)],}

for k,v in graph.items():
  print(k, get_min(graph, k))

1 => 1
2 => -1
3 => 1
4 => 2
5 => 2
6 => -1
7 => 1
8 => -1

尝试这个:

def get_smallest_num(key):
    return min(map(lambda x: x[1], graph[key]))

print(get_smallest_num(1)) # 1
print(get_smallest_num(5)) # 6

min((graph[key])[1])对我有用。

您可以尝试: min([x[1] for x in graph[key]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM