当我试图用下面这样的一行来陈述时
def get_cubes(x):
ls=[]
ls.append(pow(item*3, 3)) for item in range(int((x-x%3)/3)+1)
return ls
总是有一个错误:
File "<ipython-input-47-8c391c3d568a>", line 3
ls.append(pow(item*3, 3)) for item in range(int((x-x%3)/3)+1)
^
SyntaxError: invalid syntax
但当我用常规for循环方法编写它时,它工作得很好。有人能告诉我为什么吗?
解决方案
如果您严格要求一行,那么这就是解决方案:
但是由于在Python中,清晰性和可读性应该始终是优先考虑的,所以最好像@daniel那样将其作为函数编写:
输出
使用for循环测试函数可以得到以下结果:
解释
对于那些问为什么@daniel的代码有效的人:
原始代码执行以下操作:
x
,从0
迭代到3 divides x
加上1
的次数。步骤1最初编写为
当除以
3
时减去一个数字的提醒,然后在加1
之前除以3
。但是同样的结果也可以通过把x
除以3
的整数部分,然后再加上1
得到,这看起来像这样:第2步将每个迭代乘以
3
,然后将其提升到3
的幂次,但也可以通过使用范围(就像@daniel所做的那样)来实现“乘法”,方法是:从
0
到x+1
在3
的步骤上迭代,得到相同的结果。一、 ex
正在10
:对于步骤3,我们只需要应用
pow(x, 3)
(或x ** 3
),然后使用列表理解将所有内容都放在一行中,然后我们可以将其放在lambda函数中或函数的return语句中。我的回答遵循(修改)您的方法(代码),而不是使用列表理解,而是以正确的方式。将它与您的代码进行比较,您将找出错误所在。我添加了注释
#
来解释更改for循环的正确语法是
也许,当循环体仅附加到列表时,您正在寻找列表理解,这是一种生成列表的方法:
或者简而言之:
相关问题 更多 >
编程相关推荐