对和平方差的列表理解

List comprehensions for Sum square difference

你能解释一下为什么效果不佳吗?

print([sum(a)**2 for a in range(100)] - [sum(a*a) for a in range(100)])

我正在尝试用一行解决

Traceback (most recent call last):
  File "C:/Users/1/PycharmProjects/Python_DevOps/hw/hw9.py", line 15
    print([sum(a)**2 for a in range(1,100)] - [sum(a*a) for a in range(1,100)])
  File "C:/Users/1/PycharmProjects/Python_DevOps/hw/hw9.py", line 15, in <listcomp>
    print([sum(a)**2 for a in range(1,100)] - [sum(a*a) for a in range(1,100)])
TypeError: 'int' object is not iterable

当你写 sum(a)sum(a*a) none 求和多个值时,你需要求和你在列表理解中构建的所有值

sum([a ** 2 for a in range(100)])

然后 a**2 == a*a 所以你的实际会给出 0,第一个参数是总和的平方,你可以直接将 range 传递给 sum 因为它期望一个可迭代的

i = 11
print(sum(range(1, i)) ** 2 - sum(a ** 2 for a in range(1, i))) # 2640

你的问题是 python sum 接收到一个可迭代的(在本例中是一个列表)而不是一个整数,所以你应该简单地在求和的括号中添加理解。

像这样:

>>> print(sum(a**2 for a in range(100)) - sum(a*a for a in range(100)))

输出:

0

根据 docs:

Sums start and the items of an iterable from left to right and returns the total.

所以当您执行 sum(a) 时,a 是一个由 range() 函数生成的整数。由于整数不可迭代,因此会引发类型错误。

此外,a**2 等于 a*a,因此您的输出将为零。根据问题的答案是这样的:

print(sum(a for a in range(1,11))**2 - sum(a**2 for a in range(1,11)))