【问题标题】:How can I let my code return the numbers that result in the biggest difference?如何让我的代码返回导致最大差异的数字?
【发布时间】:2021-11-08 14:41:00
【问题描述】:

我写了这段代码:

def partition(lst: list):
    f = []
    for i in range(len(lst)):
        if i < len(lst)-1:
            diff = lst[i+1] - lst[i]
            f.append(diff)
        else:
            return f

def grouping(lst: list):
    for i in range(len(lst)):
        if lst[i+1] - lst[i] == 

print(grouping([1,3,5,7,12,14,15]))

我希望grouping(lst) 返回导致最大差异的两个数字。我该怎么做?

因此,如果我们使用print(partition([1,3,5,7,12,14,15])),则输出将为5。 我希望grouping 返回数字,其差是最大值,或者在这种情况下,5

根据print(partition([1,3,5,7,12,14,15]))的输入,输出grouping应该是[7,12],因为它们的差为5。

我该怎么做?

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    使用zip:

    def partition(lst: list):
        return max(j-i for i,j in zip(lst[:-1], lst[1:]))
    
    def grouping(lst: list):
        differences = [j-i for i,j in zip(lst[:-1], lst[1:])]
        return [(i, j) for i, j in zip(lst[:-1],lst[1:]) if j-i == max(differences)][0]
    
    >>> partition([1,3,5,7,12,14,15])
    5
    
    >>> grouping(lst)
    (7, 12)
    

    如果你想使用字典,下面的结构可能是最好的:

    dct = {(i, j): j-i for i, j in zip(lst[:-1], lst[1:])}
    
    >>> max(dct.values())
    5
    
    >>> max(dct, key=dct.get)
    (7, 12)
    

    【讨论】:

      【解决方案2】:

      你可以使用zipdict得到你想要的:

      lst = [1,3,5,7,12,14,15]
      
      res = {}
      for a,b in zip(lst,lst[1:]):
          res.setdefault((b-a), []).append((a,b))
      

      输出:

      >>> res
      {2: [(1, 3), (3, 5), (5, 7), (12, 14)], 5: [(7, 12)], 1: [(14, 15)]}
      
      >>> max(res)
      5
      
      >>> res[max(res)]
      [(7, 12)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-09
        • 2017-07-20
        • 1970-01-01
        • 2020-02-12
        • 2021-04-20
        • 1970-01-01
        • 2022-01-23
        相关资源
        最近更新 更多