0

我正在编写一个函数,它以列表 L 作为参数并返回一个列表,该列表由 L 中的所有完美正方形元素组成。

def isPerfectSquare(n):

    return n==int(math.sqrt(n))**2


def perfectSquares2(L):

    import math
    return(list(filter(isPerfectSquare,(L))))

我认为我的过滤功能是错误的,但我不知道如何修复它......

4

3 回答 3

4

你必须import mathin 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)]
于 2013-07-07T03:52:25.703 回答
0

这是一个使用的好地方lambdalist()此外,如果 Python 2.x 或额外的括号,则无需使用。

import math
def perfectSquares2(L):
    return filter(lambda n: n==int(math.sqrt(n))**2, L)
于 2013-07-07T03:59:46.307 回答
0
x=int(input())
if x>0:
    for i in range(x):
        p=i**2
        print(p)
于 2018-10-26T12:47:22.747 回答