【问题标题】:How do you take values from dictionaries in python for calculations?如何从 python 中的字典中获取值进行计算?
【发布时间】:2018-04-02 00:42:18
【问题描述】:

我必须回答以下问题:

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

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) 
}

编写代码来计算哪个岛的面积最小,使用您的 land_rectangle_area 函数。

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

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

我不确定如何从这里开始处理这个问题?

【问题讨论】:

  • docs 开始怎么样?正如我的导师在任何标准库中所说的那样,“RTFM”。
  • 听起来你需要阅读文档/教程。官方文档/教程是一个很好的起点。

标签: python python-3.x dictionary math area


【解决方案1】:

您可以使用 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])))

【讨论】:

    【解决方案2】:

    想想你的问题集:

    • 您已经获得了容器。所以现在你需要学习如何访问它的内容。
    • 您已经知道计算面积的函数 (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
    

    【讨论】:

      【解决方案3】:

      给你。只需遍历岛屿,找到它们的面积并在当前面积小于最小值时更新您的答案。

      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)
      

      【讨论】:

      • 不要影响min
      • @Miraj50 他们的意思是当min 是内置变量时使用变量名min(即min(a, b)
      猜你喜欢
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2018-07-08
      • 2019-04-24
      • 1970-01-01
      相关资源
      最近更新 更多