首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >和平方差的列表理解

和平方差的列表理解
EN

Stack Overflow用户
提问于 2021-08-22 09:32:13
回答 3查看 81关注 0票数 1

请你解释一下,它为什么不能正常工作?

代码语言:javascript
复制
print([sum(a)**2 for a in range(100)] - [sum(a*a) for a in range(100)])

我在努力解决

一条龙

代码语言:javascript
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-08-22 09:38:54

当您编写sum(a)sum(a*a)时,它们都不和多个值,您需要将列表理解中构建的所有值加在一起。

代码语言:javascript
复制
sum([a ** 2 for a in range(100)])

然后是a**2 == a*a,所以您的实际值是0,第一个参数是和的平方,您可以直接将range传递给sum,因为它需要一个可迭代的

代码语言:javascript
复制
i = 11
print(sum(range(1, i)) ** 2 - sum(a ** 2 for a in range(1, i))) # 2640
票数 1
EN

Stack Overflow用户

发布于 2021-08-22 09:39:02

您的问题是,在python中,sum接收一个可项目的(在本例中是一个列表),而不是一个整数,因此您应该简单地在和的括号中添加理解。

像这样的

代码语言:javascript
复制
>>> print(sum(a**2 for a in range(100)) - sum(a*a for a in range(100)))

输出:

代码语言:javascript
复制
0
票数 0
EN

Stack Overflow用户

发布于 2021-08-22 09:41:26

根据文档的说法:

和、开始和可从左到右迭代的项,并返回总计。

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

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

代码语言:javascript
复制
print(sum(a for a in range(1,11))**2 - sum(a**2 for a in range(1,11))) 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68880040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档