我试图将所有数字加到一个范围内,所有数字都达到相同的范围。
我正在使用python:
limit = 10
sums = []
for x in range(1,limit+1):
for y in range(1,limit+1):
sums.append(x+y)
然而,这很好用,因为嵌套循环,如果限制太大,则需要花费大量时间来计算总和。
如果没有嵌套循环,有没有办法做到这一点?
(这只是为了解决ProjectEuler问题我需要做的一些简化。它涉及获取所有大量数字的总和。)
答案 0 :(得分:2)
[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]
答案 1 :(得分:1)
我想把所有的数字加起来 到一个范围,所有数字都达到 相同的范围。
所以你想要计算limit**2
总和。
因为嵌套循环,如果是 限制太大会占用很多 时间来计算总和。
错误:由于嵌套循环,它是不“ - 这是因为你计算了二次数的和,因此做了二次方的工作。
有没有办法没有这样做 一个嵌套的循环?
你可以屏蔽嵌套,就像在@ aaron的答案中一样,你可以将你计算的总和的数量减半,因为问题的模拟性(尽管这与你的代码不同),但是,准备一个列出具有二次项目数的列表,绝对没有办法避免做二次数量的工作。
然而,出于您的声明目的
获得所有丰富的总和 号。
你需要一个无限的工作量,因为有无数的丰富数字; - )。
我认为你在考虑问题23,这实际上是非常不同的:它要求所有数字的总和不能表示为 two 的总和数字。您所询问的总和如何帮助您更接近该解决方案,这真的让我失望。
答案 2 :(得分:0)
我不确定是否有一种不使用嵌套循环的好方法。
如果我穿上鞋子,我会写如下:
[x + y表示范围内的x(1,限制+ 1),范围内的y(1,限制+ 1)]