【发布时间】:2017-08-10 13:50:45
【问题描述】:
我正在练习列表推导和嵌套列表推导。作为我练习的一部分,我正在写出等效的 for 循环。这个for循环我无法正确,我相信这是因为我试图在函数调用中分配一个值而不是一个变量。我收到的错误是:
File "<stdin>", line 4
SyntaxError: can't assign to function call
我为这个循环写的代码是:
import math
def squared_primes():
list = []
for x in range(1,1000000):
for q in range(2,math.sqrt(x)+1):
if all(x % q != 0):
list.append(x**2)
print(list)
这个函数试图创建一个完全平方的列表,其根是 1 到 1000000 范围内的素数。
谁能帮我理解我的循环语法到底在哪里出错了?另外,我可以将其作为嵌套列表理解吗?显然,我的列表理解正在崩溃,因为我的 for 循环语法不正确......
解决方案:感谢用户@Evan,我能够修复变量和语法问题,并从this thread 获取了一些关于如何修复all() 语句的提示。
此代码将正确返回 1,1000 的素数平方列表:
def squared_primes():
list1 = []
for x in range(1,1000):
if all(x%q !=0 for q in range(2,int(math.sqrt(x)+1))):
list1.append(x**2)
print(list1)
【问题讨论】:
-
您的意思是将浮点数作为第二个参数传递给内置的 range() 吗?
-
@Evan 不,我的意思是传递一个整数。我尝试将 int(q) 放在范围内......但它仍然无法运行。虽然也许我应该把它留在里面,因为它看起来不像是错误。不过,我会再试一次。
-
另外,我假设您已经在代码中缩进了 squared_primes() 函数,但是在此处发布时忘记添加额外的四个空格。我可以在没有函数调用错误的情况下运行您的代码,但是如果我删除缩进,我显然会得到缺少缩进的语法错误。我使用 int() 对 math.sqrt(x)+1 表达式进行类型转换以再次测试以避免类型错误。
-
@Evan 抱歉,我确实忘记了这里的缩进。我现在就修。您的列表输出正确吗?你必须在 range 函数之前添加 int(q) 吗?我不知道为什么会出现此错误...我现在要回去尝试。退出 python,以防内存中存储了一些变量。
-
刚刚意识到,你设置了list=somevariable。 list 是内置类型,不应用作变量名。把它改成其他的,你会在那里解决你的问题。
标签: python for-loop list-comprehension primes nested-loops