我正在尝试创建一个简单的函数,它将取整数从0开始。例如,如果用户输入整数3,结果将为6,因为0 + 1 + 2 + 3 = 6
最好/最有效的方法是什么?
最终我想创建一个循环,为列表执行此操作,用户输入列表[4,5,6],函数将返回[10,15,16]。
提前致谢!
答案 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]
答案 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