总结计划

时间:2016-05-09 01:12:22

标签: python function integer sum

我正在尝试创建一个简单的函数,它将取整数从0开始。例如,如果用户输入整数3,结果将为6,因为0 + 1 + 2 + 3 = 6

最好/最有效的方法是什么?

最终我想创建一个循环,为列表执行此操作,用户输入列表[4,5,6],函数将返回[10,15,16]。

提前致谢!

5 个答案:

答案 0 :(得分:2)

存在一种封闭形式的解决方案,它具有恒定的时间(而不是线性时间),这将比任何迭代解决方案快得多。 //除法运算符强制求整数结果(如果您使用的是Python 3)。

def mysum(n):
    return n*(n+1)//2

如果要将其应用于列表,可以使用map

def mysum2(li):
    return map(mysum, li)

或者您可以直接进行,而不使用mysum(这将是最快的):

def mysum2(li):
    return [n*(n+1)//2 for n in li]

封闭形式的解决方案可以使用比迭代解决方案更大的值。例如:

>>> mysum2([4, 5, 6, 10000000000000])
[10, 15, 21, 50000000000005000000000000]
>>> 

使用sum的解决方案永远不会返回此类案例的结果。

答案 1 :(得分:1)

对于单个输入,您可以使用

def summer(n):
     # Create a list of numbers from 0 to n.
     # The range function is an end-exclusive range
     return sum(range(n+1))

对于多个输入,请使用map功能

def multisummer(ns):
    return map(summer, ns)

答案 2 :(得分:1)

X = [4,6,7]
X = [x*(x+1)/2 for x in X]

答案 3 :(得分:1)

时间复杂度:O(n)

def get_sum(a):
   return [n * (n + 1) / 2 for n in a]


if __name__ == '__main__':
   print get_sum([4, 5, 6])

结果:[10,15,21]

https://en.wikipedia.org/wiki/Triangular_number

答案 4 :(得分:0)

求和函数在这里很有用。

def findsum(x):
    # The 0 is optional, but it makes it clear that you are starting from 0.
    return sum(range(0, x + 1))

例如:

>>> findsum(6)
21