如何从python中的字典中获取值进行计算?

2024-05-13 20:20:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我必须回答以下问题:

八。 我们有一本包含几个矩形岛的字典:

islands = {
    "Banana island"    : (3,5,7,6),
    "Mango island"     : (10,3,19,4),
    "Pineapple island" : (8,8,9,20),
    "Coconut island"   : (2,13,5,9) 
}

编写代码,使用 陆地面积函数。你知道吗

我为该区域创建了一个函数:

def land_rectangle_area(x1, y1, x2, y2):   
    area=abs((int(x1)-int(x2))*(int(y1)-int(y2)))
    return(area)

我不确定从这里开始我该如何处理这个问题?你知道吗


Tags: 函数字典areaintbananax1x2矩形
3条回答

可以将Python的min函数与land_rectangle_area函数一起作为键来执行此操作:

def land_rectangle_area(x1, y1, x2, y2):   
    area=abs((int(x1)-int(x2))*(int(y1)-int(y2)))
    return(area)

>>> min(islands.items(), key=lambda (k,t): land_rectangle_area(*t))
('Banana island', (3, 5, 7, 6))

你可以用同样的方法找到max

>>> max(islands.items(), key=lambda (k,t): land_rectangle_area(*t))
('Pineapple island', (8, 8, 9, 20))

或者,使用列表理解将元组转换为区域:

>>> [(k,land_rectangle_area(*t)) for k,t in islands.items()]
[('Pineapple island', 12), ('Coconut island', 12), ('Banana island', 4), ('Mango island', 9)]

然后取min

>>> min([(k,land_rectangle_area(*t)) for k,t in islands.items()], key=lambda t: t[1])

或者从最小到最大排序:

>>> sorted(islands.items(), key=lambda (k,t): land_rectangle_area(*t))
[('Banana island', (3, 5, 7, 6)), ('Mango island', (10, 3, 19, 4)), ('Pineapple island', (8, 8, 9, 20)), ('Coconut island', (2, 13, 5, 9))]

(因为椰子岛和菠萝岛的面积是一样的,它们中的任何一个在功能和种类上都可以被认为是max。您将添加另一个密钥以确定……)

或者您可以绕过命名函数,只需将min与键函数一起使用:

>>> min(islands.items(), key=lambda (k,t): abs((t[0]-t[2])*(t[1]-t[3])))

想想你的问题集:

  • 你已经拿到集装箱了。所以现在你需要学习如何访问它的内容。你知道吗
  • 您已经知道计算面积的函数(A = L*W)。你知道吗
  • 你需要找到最小面积。所以你需要跟踪最小值。你知道吗

鉴于此,您应该能够推理出流程(但不一定是实现)。在这种情况下,拿出好的纸笔写下来:

smallestAreaSoFar = None 
smallestIsland = None

for each island in my container of islands:
    access island coordinates
    calculateArea(coordinates)
    if we havent seen an area yet:
        smallestAreaSoFar = calculatedArea
        smallestIsland = island
    if we have:
        if smallestAreaSoFar > calculatedArea:
             smallestAreaSoFar = calculatedArea
             smllestIsland = island

output smallestIsland

给你。只要遍历这些岛屿,找到它们的面积,如果当前面积小于最小值,就更新你的答案。你知道吗

def land_rectangle_area(x1, y1, x2, y2):   
    area=abs((int(x1)-int(x2))*(int(y1)-int(y2)))
    return(area)

islands = {
    "Banana island"    : (3,5,7,6),
    "Mango island"     : (10,3,19,4),
    "Pineapple island" : (8,8,9,20),
    "Coconut island"   : (2,13,5,9) 
}
minimum = float('Inf') # equivalent to infinity
ans=''
for i in islands:
    a = land_rectangle_area(*islands[i])
    if a<minimum:
        minimum = a
        ans = i
print (ans,minimum)

输出:

('Banana island', 4)

相关问题 更多 >