对和平方差的列表理解
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)))
你能解释一下为什么效果不佳吗?
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)))