和平方差的列表理解

2024-05-16 18:44:30 发布

您现在位置:Python中文网/ 问答频道 /正文

你能解释一下为什么它不好用吗

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

我试图在一行中解决Euler problem 6

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

Tags: inpymostforlinerangeusersdevops
3条回答

您的问题是,在python中sum接收的是一个可写的(在本例中是一个列表)而不是一个整数,因此您只需将理解添加到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()函数生成的。由于整数不可iterable,因此会引发类型错误

而且,a**2等于a*a,所以输出为零。根据问题的答案是:

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

当您编写sum(a)sum(a*a)时,没有一个会对多个值求和,您需要对列表中生成的所有值求和

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

相关问题 更多 >