[英]Python - Sum of numbers
我试图将所有数字加到一个范围内,所有数字都达到相同的范围。
我正在使用python:
limit = 10
sums = []
for x in range(1,limit+1):
for y in range(1,limit+1):
sums.append(x+y)
然而,这很好,因为嵌套循环,如果限制太大,则需要花费大量时间来计算总和。
没有嵌套循环有没有办法做到这一点?
(这只是为了解决ProjectEuler问题我需要做的一些简化。它涉及获得所有大量数字的总和。)
[x + y for x in xrange(limit + 1) for y in xrange(x + 1)]
这仍然执行尽可能多的计算,但它的速度大约是for循环的两倍。
from itertools import combinations
(a + b for a, b in combinations(xrange(n + 1, 2)))
这避免了大量重复的总和。 我不知道你是否想跟踪这些与否。
如果你只是希望每个总和没有代表你如何得到它,那么xrange(2*n + 2)
给你你想要的东西,没有重复或循环。
在回答问题时:
[x + y for x in set set1 for y in set2]
我试图将所有数字加到一个范围内,所有数字都达到相同的范围。
所以你想要计算limit**2
总和。
由于嵌套循环,如果限制太大,则需要花费大量时间来计算总和。
错误:它不是 “因为嵌套循环” - 这是因为你计算了二次数的和,因此做了二次方的工作量。
没有嵌套循环有没有办法做到这一点?
您可以屏蔽嵌套,就像在@ aaron的答案中一样,并且您可以将由于问题的模拟而计算的总和的数量减半(尽管这与您的代码不同),但是,准备一个包含二次数的项目,绝对没有办法避免做二次数量的工作。
但是,为了您的声明目的
获得所有丰富数字的总和。
你需要无限量的工作,因为有无数的丰富数字;-)。
我认为你有问题23,这实际上是非常不同的:它要求所有数字的总和不能表示为两个丰富数字的总和。 您所询问的总和如何帮助您更接近该解决方案真的让我失望。
我不确定是否有一种不使用嵌套循环的好方法。
如果我穿上你的鞋子,我会写如下:
[x + y表示范围内的x(1,限制+ 1),y表示范围(1,限制+ 1)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.