【问题标题】:Sum up numbers close to a specific number in a list总结列表中接近特定数字的数字
【发布时间】:2021-11-14 15:42:51
【问题描述】:

示例 1

List = [12,40,30,53,82,31,100]

我想生成一个列表,其中包含许多接近 80 且不大于 80 的数字。如果原来大于 80 的数字就通过了。

[52,30, ,53,82, 31,100] 这样的结果 因为[12+40,30,53,82,31 ,100]

示例 2

List =[45,102,31,25,2,99]
Result = [45,102,58,99]

请帮我弄清楚如何用这个问题编码,非常感谢。

我试过了

For i in range(len(List)):

【问题讨论】:

    标签: python list sum


    【解决方案1】:

    试试这个:

    start = -1
    sum_ = 0
    List = [45,102,31,25,2,99]
    result = []
    i = 0
    
    while i < len(List):
        if start == -1:
            start = i
    
        new_sum = sum_ + List[i]
        if new_sum > 80:
            result.append(sum_)
            start = -1
            sum_ = 0
            new_sum = 0
            if List[i] > 80:
                result.append(List[i])
                i += 1
            continue
        else:
            sum_ = new_sum
            i += 1
    
    print(result)
    # [45, 102, 58, 99]
    

    【讨论】:

      【解决方案2】:
      List =[45,102,31,25,2,99]
      # List = [12,40,30,53,82,31,100]
      result = []
      
      for i in range(0,len(List)):
          if List[i]>=80 or len(result)==0:
              result.append(List[i])
          elif result[-1] + List[i] <=80 :
              result[-1] += List[i] 
          else :
              result.append(List[i])
          
      print(result)
      

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案3】:

      您可以定义简单的生成器函数,如果它们达到限制,它将产生值的总和:

      def sum_up_to(source, limit):
          summ = 0
          for i in source:
              if summ + i > limit:
                  if summ:
                      yield summ
                      summ = i
                  else:
                      yield i
              else:
                  summ += i
          if summ:
              yield summ
      

      然后以任意限制调用它:

      src1 = [12, 40, 30, 53, 82, 31, 100]
      dst1 = list(sum_up_to(src1, 80))  # [52, 30, 53, 82, 31, 100]
      src2 = [45, 102, 31, 25, 2, 99]
      dst2 = list(sum_up_to(src2, 80))  # [45, 102, 58, 99]
      

      更新。我已经做了一些测试(code)来比较所有答案的解决方案。这是结果(越低越好)

      olvin_roght: 0.263744345
      chandrapal_singh: 0.39295867199999995
      captain_trojan: 0.605765677
      

      测试表明,此答案的解决方案表现出最佳性能。

      【讨论】:

        猜你喜欢
        • 2023-01-07
        • 1970-01-01
        • 1970-01-01
        • 2018-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多