我正在编写一个函数,它以列表 L 作为参数并返回一个列表,该列表由 L 中的所有完美正方形元素组成。
def isPerfectSquare(n):
return n==int(math.sqrt(n))**2
def perfectSquares2(L):
import math
return(list(filter(isPerfectSquare,(L))))
我认为我的过滤功能是错误的,但我不知道如何修复它......
我正在编写一个函数,它以列表 L 作为参数并返回一个列表,该列表由 L 中的所有完美正方形元素组成。
def isPerfectSquare(n):
return n==int(math.sqrt(n))**2
def perfectSquares2(L):
import math
return(list(filter(isPerfectSquare,(L))))
我认为我的过滤功能是错误的,但我不知道如何修复它......
你必须import math
in isPerfectSquare
,否则它只是导入到perfetSquares2
函数的本地范围内。
但是,PEP 8建议您将模块导入放在脚本的顶部:
import math
def isPerfectSquare(n):
return n==int(math.sqrt(n))**2
def perfectSquares2(L):
return(list(filter(isPerfectSquare,(L))))
顺便说一句,我认为这里的列表理解可能更快:
def perfectSquares2(L):
return [i for i in L if isPerfectSquare(i)]
这是一个使用的好地方lambda
。list()
此外,如果 Python 2.x 或额外的括号,则无需使用。
import math
def perfectSquares2(L):
return filter(lambda n: n==int(math.sqrt(n))**2, L)
x=int(input())
if x>0:
for i in range(x):
p=i**2
print(p)