for循环中的语法说明?

时间:2011-09-29 09:11:42

标签: javascript python object for-loop

我试图在projecteuler上做一些问题,然后我得到了一个正方形和平方和的总和。我不想暴力破解它,所以我查找了解决方案,即:

sum1 = 0
sum2 = 0

for i in ((x,x ** 2) for x in range(1,100+1)):
    sum1 += i[0]
    sum2 += i[-1]

print(sum1 ** 2 - sum2)

我没有得到:

(x,x ** 2) for x in range(1,100+1)

我也在javascript的另一个代码高尔夫解决方案中看到了这一点。这是一种特定的语法,还是一种不熟悉的常规方法?有人可以解释一下吗?

1 个答案:

答案 0 :(得分:4)

遇到复杂语法时,请添加print语句。

for i in ((x,x ** 2) for x in range(1,100+1)):
    print i

没太大帮助。

试试这个。

a = ((x,x ** 2) for x in range(1,100+1))
print a
for i in a:
     print i

有用吗?也许

试试这个:

a = ((x,x ** 2) for x in range(1,100+1))
b = list(a)
print b

嗯。 for i in a循环也停止工作。这个生成器对象似乎只做了一次。在for循环中或在list()(或tuple())函数中,但不是两者都有。

试试这个。

 for x in range(1,100+1): 
      print x, x**2

好。那么,我们学到了什么?

((x,x ** 2) for x in range(1,100+1))是一个生成器表达式。 http://www.python.org/dev/peps/pep-0289/

它是“可迭代的”,可以在for语句或list()函数中使用。

另外,我们已经学会了添加print语句来探索令人困惑的语法。