Python - 数字之和

时间:2010-08-13 02:09:43

标签: python loops for-loop

我试图将所有数字加到一个范围内,所有数字都达到相同的范围。

我正在使用python:

limit = 10
sums = []
for x in range(1,limit+1):
    for y in range(1,limit+1):
        sums.append(x+y)

然而,这很好用,因为嵌套循环,如果限制太大,则需要花费大量时间来计算总和。

如果没有嵌套循环,有没有办法做到这一点?

(这只是为了解决ProjectEuler问题我需要做的一些简化。它涉及获取所有大量数字的总和。)

3 个答案:

答案 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)]