Python完美广场

时间:2013-07-07 03:50:01

标签: python python-3.x

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

def isPerfectSquare(n):

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


def perfectSquares2(L):

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

我认为我的过滤功能有误,但我不确定如何解决它...

3 个答案:

答案 0 :(得分:4)

您必须在import mathisPerfectSquare,否则只会在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)]

答案 1 :(得分:0)

这是使用lambda的好地方。此外,如果Python 2.x或额外的parens,则无需使用list()

import math
def perfectSquares2(L):
    return filter(lambda n: n==int(math.sqrt(n))**2, L)

答案 2 :(得分:0)

x=int(input())
if x>0:
    for i in range(x):
        p=i**2
        print(p)