代码之家  ›  专栏  ›  技术社区  ›  Ahamed Moosa

如何用python编写一个函数来对给定的一组数字进行求和,而不是用python本身?

  •  -1
  • Ahamed Moosa  · 技术社区  · 8 年前

    如何用python编写一个函数来对给定的一组数字进行求和

    输入: 一个n个整数num的数组,

    输出: 一种数组输出,使输出[i]等于除nums[i]以外的所有nums元素的总和。

    例如,给定[1,2,3,4],返回[9,8,7,6]。

    4 回复  |  直到 8 年前
        1
  •  1
  •   Adi219    8 年前

    其他答案忽略了同一个数字存在重复的可能性:

    def sum_neighbours(li): ## Renamed list to li as list is already a python keyword so shouldn't be used as you may accidentally shadow it and have problems
        return [sum(li) - (li.count(num) * num) for num in li]
    

    如果性能是一个关键因素:

    def sum_neighbours(li):
        s = sum(li) ## Precompute the sum so that it doesn't need to be recalculated in every iteration
        return [s - (li.count(num) * num) for num in li]
    

    如果重复项不影响您的金额:

        return [sum(li) - num for num in li]
    

    另外,如果您的输入列表总是与[1,2,3,…,n]相似,那么可以通过 s = (s * (s + 1)) / 2 因为这样可以省去程序添加列表中每个数字的麻烦。

        2
  •  2
  •   Reut Sharabani    8 年前

    也许更像蟒蛇:

     def sum_neighbors(_list):
         s = sum(_list)
         return [s - item for item in _list]
    

    或者,如果你敢:

     def sum_neighbors(_list):
         s = sum(_list)
         return list(map(operator.sub, itertools.repeat(s), _list))
    

    要处理重复项:

    def sum_neighbors(_list):
        counts = collections.Counter(_list)
        s = sum(_list)
        return [s - counts[item] * item for item in _list]
    

    提示:我已重命名 list 到 _list 这样你就不会在建筑上留下阴影 列表 键入。

        3
  •  1
  •   Mehrdad Pedramfar    8 年前

    我认为最好用这个:

    a = [1,2,3,4]
    result = [sum(a)-i for i in a]
    

    输出:

    [9, 8, 7, 6]
    
        4
  •  1
  •   user10183314user10183314    8 年前
    def add_func(lst):
          return list(sum(lst)-i for i in lst))
    
    print(add_func([1,2,3,4]))
    
    推荐文章